(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。