题目描述:
输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。
输入格式:
输入在一行中依次给出3个整数A、B和D。
输出格式:
输出A+B的D进制数。
输入样例:123 456 8输出样例:
1103
思路:
有题值A+B最大为2^31-2,int型可以满足;之后用除基除余法即可对十进制进行转换;
(1)十进制x转换为Q进制y:
采用“除基除余法”,基即为十进制数x,每次讲x除Q,得到的余数低位存储,而商则作为新的x作以上操作,直至商为0;然后从高位输出即可得到y;
代码如下:
#include <cstdio>
int main()
{
int a, b, D;
int d[31]; //边界情况也不会超过31位;
scanf ("%d%d%d", &a, &b, &D);
int sum = a +b, count = 0;
do { //sum为0,也要先进行一次赋值;
d[count++] = sum % D;
sum = sum / D;
} while (sum != 0);
for (int i = count - 1; i >= 0; i--) { //从高位输出;
printf ("%d", d[i]);
}
return 0;
}
(2)Q进制x转换为十进制y:
若一个十进制数为,它可以转化为,
若一个Q进制数为,他可以转化为,
对Q进制数运用十进制的加法和乘法即可实现进制间转化;
运用以下代码可以实现:
int y = 0, product = 1;
while (x != 0) {
y = y + (x % 10) * product; //用于获取x的个位的数;
x = x / 10; //去掉x的个位;
product = product * p; //用于得到p^n;
}