(pat乙级1022)
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
加粗样式
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
c++代码:
#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
int main(){
int a,b,d;
cin>>a>>b>>d;
int sum=a+b,yushu,shang;
string result; //以string形式保存余数
if(sum==0)cout<<0; //特殊情况,要转换的数为0,除法会有错,不进行除法,直接输出0
else{
while(sum!=0){
shang=sum/d;
yushu=sum-shang*d;
stringstream ss;
string syushu;
ss<<yushu;
ss>>syushu;
result+=syushu;
if(shang==0){ //转换结束,倒叙输出余数
int l=result.length();
for(int i=l-1;i>=0;i--)cout<<result[i];
break;
}
sum=shang;
}
}
return 0;
}
注意:
进制转化:辗转相除法
把a转化为d进制:
初始a/d 得到商 和 余数r1
再不断 商/d 得到新的商 和 余数r2
…
最后把余数倒序输出 rn rn-1 …r2 r1就是转化的d进制结果
特殊情况:当要转换的数为0,除法会出错,直接输出0。