题目:D进制的A+B
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
解题思路:
首先我们需要知道如何实现进制的转化,例如以2进制为例,算式过程如左图所示,其是每次除以2,并分别得到余数和整数,所以我们可以将余数存入到数组中,并将整数作为下一次的被除数,直到被除数小于除数,这时就可以得到最后一个余数,并将其放入到数组中,最后从数组的最后一个往前输出就可以得到此数转换成2进制的形式。以此类推,将2转换成D,就可以得到D进制下的形式,本题的算式如右图所示。
代码:
#include<iostream>
#define MAX 100000
using namespace std;
int main()
{
int A,B; //两个10进制正整数
int sum = 0; //两个正整数之和
int D; //转化为D进制
int result[MAX]={0}; //转换的结果
int i = 0; //转化过后的位数
cin>>A>>B>>D;
sum = A + B;
//开始做除法
while(sum >= D) //还可以再除
{
result[i++] = sum % D; //取余
sum = sum / D; //取整
}
result[i++] = sum; //取最后的余数
//输出(反向输出)
for(int j = i-1;j >= 0;j--)
{
cout<<result[j];
}
cout<<endl;
system("pause");
return 0;
}