1022 D进制的A+B (20 分)
题目
输入两个非负 10 进制整数 A 和 B (≤230 −1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
思路
- P进制 -> Q进制
- P进制数x -> 十进制数y
int y=0,product=1; //不断乘p的几次方
while(x!=0){
y=y+(x%10)*product; //每次获取x的个位数,乘p的几次方
x=x/10; //去掉x的个位
product=product*p;
}
- 十进制数y -> Q进制数z
除基取余法
每次将代转换数除以Q得到的余数进行存储,商继续操作,直到为0
int z[40],num=0;
do{
z[num++]=y%q; //除基取余,存在数组内
y=y/q; //商保留
}while(y!=0);
代码
#include <stdio.h>
int main(){
int a,b,d; //d进制
scanf("%d %d %d",&a,&b,&d);
int sum=a+b;
int mp[31],num=0; //最高32位
do{ //除基取余法
mp[num++]=sum%d;
sum=sum/d;
}while(sum!=0);
for(int i=num-1;i>=0;i--){ //数组从零开始,num-1
printf("%d",mp[i]);
}
return 0;
}