1022 D进制的A+B (20)(20 分)
输入两个非负10进制整数A和B(<=2^30^-1),输出A+B的D (1 < D <= 10)进制数。
输入格式:
输入在一行中依次给出3个整数A、B和D。
输出格式:
输出A+B的D进制数。
输入样例:
123 456 8
输出样例:
1103
#include<cstdio>
#include<stdlib.h>
int main(){
unsigned int A,B,D;
int ans=0,P,temp,N=10;
const unsigned int NewSize=10;
int *Q=(int *)malloc(sizeof(int)*N);
scanf("%d%d%d",&A,&B,&D);
P=A+B;
do{
temp=P%D;
P/=D;
Q[ans]=temp;
ans++;
if(ans==N){
N+=NewSize;
Q=(int *)realloc(Q,sizeof(int)*N);
}
}while(P!=0);
for(int i=ans-1;i>=0;i--){
printf("%d",*(Q+i));
}
printf("\n");
return 0;
}
以上以通过在线测试,总结如下:
上面因为没仔细考虑最大数组长度其实31位足以,采用了malloc和realloc来动态分配和修改数组空间大小,实则多余。
在do while循环时,没考虑清楚结束条件为P==0即可,此处导致0 1 2和0 0 2这种用例出错,找了好久的问题。