PTA–1022 D进制的A+B (20分)
题目:
输入两个非负 10 进制整数 A 和 B ( ≤ 2 30 − 1 ≤2^{30}−1 ≤230−1),输出 A+B 的 D ( 1 < D ≤ 10 ) D (1<D≤10) D(1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A
、B
和 D
。
输出格式:
输出 A+B
的 D
进制数。
输入样例 1:
123 456 8
输出样例 1:
1103
题目分析:
- A,B与A+B均不大于int的最大值,所以定义为int型。
A+B在2进制时位数最大,最大位数为30位,所以数组大小开30 - 十进制转其他进制用除基取余法
其他进制转十进制用加权求和法 - 要考虑A+B的和为0的情况,不然会错误
代码如下:
#include<stdio.h>
int main(){
int A,B,sum,i=0,radix,c[31];
scanf("%d %d %d",&A,&B,&radix);
sum=A+B;
if(sum==0)//考虑两者相加为0的情况。
printf("0");
while(sum>0){
c[i++]=sum%radix; //十进制转其他进制,用除基取余法
sum/=radix; //(不断用商除以基数,然后倒序排列余数)
}
for(--i;i>=0;i--)
printf("%d",c[i]);
return 0;
}