九度 題目1026:又一版 A+B

九度 題目1026:又一版 A+B

原題OJ鏈接:http://ac.jobdu.com/problem.php?pid=1026

題目描述:

輸入兩個不超過整型定義的非負10進制整數A和B(<=2^31-1),輸出A+B的m (1 < m <10)進制數。

輸入:

輸入格式:測試輸入包含若干測試用例。每個測試用例佔一行,給出m和A,B的值。
當m爲0時輸入結束。

輸出:

輸出格式:每個測試用例的輸出佔一行,輸出A+B的m進制數。

樣例輸入:

8 1300 48
2 1 7
0

樣例輸出:

2504
1000

解題思路:

注意兩點:一個是整數類型long long int,防止溢出。
一個是使用 do-while 結構,這樣的話哪怕 A=B=0這種情況也能夠正常執行。

源代碼:

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    long long int A,B;
    int m,M[100];
    long long int sum;
    while(cin>>m && m!=0){
        cin>>A>>B;
        sum=A+B;
        int n=0;
        do{
            M[n]=sum%m;
            sum=sum/m;
            n++;
        }while(sum>0);
        /*這一步很關鍵,用do-while結構的目的是
        保證該轉化工作至少會被執行一次,那麼即使
        被轉換數字是0,程序也能正常執行*/
        for(int i=n-1;i>=0;i--){
            cout<<M[i];
        }
        cout<<endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章