题目
输入两个非负 10 进制整数 A 和 B (≤2^30 − 1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
分析:
核心算法是除基取余法的思想。10进制转N进制,把被除数除以基(进制数),得到余数存到数组(或栈)里。将得到的商做为新的被除数,再除以基,依次类推。直到得到的商等于零为止。
余数若存放到数组里则倒序输出,(存到栈里则可以根据其先进先出的特点依次输出)。
代码
stack版本:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int a,b,t,D;
cin>>a>>b>>D;
stack <int > s;
int sum=a+b;
do {
t=sum%D;//除基取余
s.push(t);//入栈
sum=sum/D; //被除数除以基,所得的商作为新一轮的被除数
}while(sum!=0);
while(!s.empty()){
cout<<s.top();//输出栈顶
s.pop();//出栈
}
return 0;
}
数组版本:
#include<iostream>
using namespace std;
int main()
{
int A,B,D;
cin>>A>>B>>D;
int a[40];
int i=0;
int sum=A+B;
do {
a[i++]=sum%D;//除基取余
sum=sum/D; //被除数除以基,所得的商作为新一轮的被除数
}while(sum!=0);
for(int j=i-1;j>=0;j--)//倒序输出
cout<<a[j];
return 0;
}