【pat乙級】D進制的A+B

(pat乙級1022)
輸入兩個非負 10 進制整數 A 和 B (≤2​30​​−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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章