原题:https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344
输入两个非负 10 进制整数 A 和 B ( ≤ 2 30 − 1 ≤2^{30}-1 ≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
题目分析:
设C = A + B,将每⼀次C % d的结果保存在int类型的数组s中,然后将C / d,直到 C 等于 0为⽌,此时s中保存的就是 C 在 D 进制下每⼀位的结果的倒序,最后倒序输出s数组即可。
即,手动模拟进制转换的过程,但是要注意边界条件,即非负数A和B同时为0的情况。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> result;
int A, B,D;
cin >> A >> B >> D;
int C = A + B;
while (C >= D) {
int digit = C % D;
result.push_back(digit);
C /= D;
}
result.push_back(C);
for (int i = result.size() - 1; i >= 0; i--) printf("%d", result[i]);
cout << endl;
system("pause");
return 0;
}
当然,也可以用一个足够大的
整数数组
实现,例如int result[100]
;
#include <iostream>
using namespace std;
int main() {
int a, b, d;
cin >> a >> b >> d;
int t = a + b;
if (t == 0) {
cout << 0;
return 0;
}
int s[100];
int i = 0;
while (t != 0) {
s[i++] = t % d;
t = t / d;
}
for (int j = i - 1; j >= 0; j--)
cout << s[j];
system("pause");
return 0;
}