PAT B1022 D进制的A+B (20分)
输入两个非负 10 进制整数 A 和 B (≤2
30
−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
以下是AC的代码:
#include<cstdio>
#define maxn 40
int ans[maxn]={0};
int main(void){
int A,B,D,i=0;
scanf("%d %d %d",&A,&B,&D);
int total=A+B;
while(total>0){
ans[i++]=total%D;
total=total/D;
}
if(i==0){
printf("%d",total);//考虑A+B==0的情况;
}else{
for(int j=i-1;j>=0;j--)printf("%d",ans[j]);
}
return 0;
}
思路:
由于A,B都在2^30以内,A+B在int 范围内,用int进行处理,使用除基取余法来求转换进制后的数,依次算出存储在答案数组ans[]中,再从高到低输出。这里需要注意要考虑到A+B==0的情况,多写一条if语句。