题目(材料题)
(1)(进制减半)
给定$n,m$,再给定一个$mn$进制下的数A,其各个数位上的数按照从高位到低位的顺序给出,请你将其转化为$n$进制,并同样按照从高位到低位的顺序输出。
输入的第一行依次为$n、m$和A的位数$d$,接下来$d$个数$a_d,a_{d-1},...,a_1$从高位到低位描述各个数位上的数。
数据满足$2≤n,m≤10,1≤d≤18,0≤A<2^{63}$,对于所有$1≤i≤d,0≤a_i < mn$。
以下程序按"逐位除以n"的方法完成进制转换。请补全程序。
01 #include <iostream>
02
03 constexpr int N = 100005;
04 long long b[N];
05
06 int main() {
07 long long n, m, d;
08 std::cin >> n >> m >> d;
09 int len = 1;
10 for (int i = 0; i < d; i++) {
11 long long x;
12 std::cin >> x;
13 for (int j = len; j >= 1; j--)
14 b[j] = _____①____;
15 b[0] = _____②____;
16 len++;
17 for (int j = 0; j < len; j++)
18 if (b[j] >= n) {
19 b[j + 1] += _____③____;
20 b[j] = _____④____;
21 if (j + 1 == len) len++;
22 }
23 }
24 while (_____⑤____) len--;
25 for (int i = len - 1; i >= 0; i--)
26 std::cout << b[i] << ' ';
27 return 0;
28 }

关注我们