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

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