(PAT乙级)1022 D进制的A+B
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
代码如下:
#include <stdio.h>
int main()
{
int a,b,d;
scanf("%d%d%d",&a,&b,&d);
int h=a+b;
int i=0,aa[31];
do{
aa[i++]=h%d;
h=h/d;
}while(h!=0);
for(i--;i>=0;i--){
printf("%d",aa[i]);
}
return 0;
}
关于进制转换问题:
(1)将p进制x转换为十进制数y
int y=0;
while(x!=0){
y+=(x%10)product;
x/=10;
product=p;
}
(2)将十进制数y转换为q进制z
int z[100];num=0;
do{
z[num++]=y%q;
y=y/q;
}while(y!=0);
将数组z从高位向低位循环输出
本题只是用的将十进制数转换为d进制数
- 思路:首先读入abd,之后要求a+b的进制转换数,调用上述方法。
- 注:用do{}while;而不是用while的原因是当y==0时会出错,因为数组没有赋初值,如果赋初值0用while也是可以的