一、题目
输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。
输入格式:
输入在一行中依次给出3个整数A、B和D。
输出格式:
输出A+B的D进制数。
输入样例:
123 456 8
输出样例:
1103
二、个人理解
本题主要考察进制转换问题(数值计算)问题。主要算法为:模拟进制转换的全部过程,不断的除进制,并记录每一次的结果,最后输出。
关键点:
- 需注意按题目要求来的话,结果最多只能为64位,故可以建立记录数组为64位。
- 一定要考虑和为0的情况,不能什么多不输出。
- -
源代码(C):
#include <stdio.h>
#define N 100//最多的情况为64,故100远远满足
int main()
{
int a, b, d;
scanf("%d%d%d", &a, &b, &d);
long long c = (long long)a + (long long )b; //a+b和可能会出现溢出,故需转换
int r[N];
for (int i = 0; i < N; i++) {
r[i] = -1;
}
//模拟进制的运算,并用r数组存储每一次的结果
int i = 0;
while (c >= d) {
r[i] = c % d;
c = c / d;
i++;
}
//有余数情况
r[i] = c;
//输出
for (i = N - 1; i >= 0; i--) {
if (r[i] != -1) {
printf("%d", r[i]);
}
}
}