1022 D进制的A+B (20) - PAT乙级

1022 D进制的A+B (20)(20 point(s))

输入两个非负10进制整数A和B(<=2^30^-1),输出A+B的D (1 < D <= 10)进制数。

输入格式:

输入在一行中依次给出3个整数A、B和D。

输出格式:

输出A+B的D进制数。

输入样例:

123 456 8

输出样例:

1103

Solution:

两数相加计算出的值不断取余数, 除以D, 算出的数进栈, 打印时利用栈的FILO特性 按照二进制数顺序打印。

坑点1:
刚开始觉得两个整数相加可能会溢出, 但是实验之后

int v = pow(2, 30);
printf("%d\n", 2*v); // 数值正常不会溢出

int整数的范围在,-2^31 ~ +(2^31 -1) ,-2 * 10^9 ~ 2 * 10^9之内, 因此不会溢出

坑点2:
当总和为0时, 无论什么进制都打印出0.

#include <iostream>
#include <stack>
using namespace std;
int main() {
int a, b, d; cin >> a >> b >> d;
int total = a + b;
if (total != 0) {
stack<int> s;
while (total) {
s.push(total % d);
total /= d;
}
while (!s.empty()) {
printf("%d", s.top());
s.pop();
}
} else { printf("0"); }
printf("\n");

return 0;
}