算法笔记:PAT B1022 D进制的A+B

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这种用例出错,找了好久的问题。


猜你喜欢

转载自blog.csdn.net/firmthinking/article/details/80709545