输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
解题思路:首先看题目给的条件 A 和 B (≤2的30次方−1),很明显如果用int必然会有溢出的情况,那么就要用数组来存放a和b,太麻烦了,这种内存溢出的题真是要命。
说一下我的思路,我用的int定义的,导致最后两个测试点无法通过。
要求输出D进制数,那么就要用源数字模D取余,然后除以D,模的这个余数我们放入数组,这个余数就是D进制的一个组成部分,按照这个思路,最后D进制数的每位我们都求出来了,只需要把题目组装起来就是一个D进制数。按照数组下标从大到小的顺序,每次*10再加下一个,比如1234,就是1*10+2=12,,12*10+3=123,,123*10++4=1234,最后得到的这个数就是D进制数。
#include<stdio.h>
#include<math.h>
int main()
{
long int a,b,d;
long int sum;
int c[1000]={0};
int i=0,j,k=0;;
scanf("%ld %ld %d",&a,&b,&d);
sum=a+b;
while(sum!=0)
{
c[i]=sum%d;
sum/=d;
i++;
}
i--;
for(j=i;j>=0;j--)
{
k=k*10+c[j];
}
printf("%d",k);
return 0;
}