输入两个非负 10 进制整数 A 和 B (≤2^30−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
思路:
本题为常规的进制转换类题目,需要理解熟记进制转换的代码实现。
进制转化采用除基取余的方法,将十进制数sum转化为d进制,结果存放于数组ans,ans数组中存储的数字为反向的数,输出时,从高位到低位。值得注意的是,采用do...while语句,而不是while,原因是:如果十进制数恰好等于0,那么while语句会直接跳出,导致结果出错;而do...while语句会在数组中存储ans[0] = 0.
注意:
- 十进制转换为D进制,采用除基取余法
- 将求得D进制的数,存于一个数组中。
- 当A+B=0时,结果要输出0,因此采用do...while结构
#include <cstdio>
int main(){
int a, b, d;
scanf("%d %d %d", &a, &b, &d);
int sum = a + b;
int ans[31], num = 0;
//将十进制数sum转化为d进制,结果存放于数组ans
do{
ans[num++] = sum % d; //取余
sum /= d; //除基
}while(sum != 0);
for(int i = num - 1; i >= 0; i--){ //从高位到低位输出
printf("%d", ans[i]);
}
return 0;
}