九度OJ 1016

題目描述:
    讀入兩個不超過25位的火星正整數A和B,計算A+B。需要注意的是:在火星上,整數不是單一進制的,第n位的進制就是第n個素數。例如:地球上的10進制數2,在火星上記爲“1,0”,因爲火星個位數是2進制的;地球上的10進制數38,在火星上記爲“1,1,1,0”,因爲火星個位數是2進制的,十位數是3進制的,百位數是5進制的,千位數是7進制的……
輸入:
    測試輸入包含若干測試用例,每個測試用例佔一行,包含兩個火星正整數A和B,火星整數的相鄰兩位數用逗號分隔,A和B之間有一個空格間隔。當A或B爲0時輸入結束,相應的結果不要輸出。
輸出:
    對每個測試用例輸出1行,即火星表示法的A+B的值。
樣例輸入:
1,0 2,1
4,2,0 1,2,0
1 10,6,4,2,1
0 0
樣例輸出:
1,0,1
1,1,1,0
1,0,0,0,0,0
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> a,b,c;//a用來存的是A,b用來存的是B,c用來存的是和。動態;
string A,B;
int p[30]=
{
    2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,
    71,73,79,83,89,97,101,103,107,109,113
};//偷個懶,直接列出素數數組,不寫了
 
void toint()
{   a.clear();
    b.clear();
    for( int i=0; i<A.length(); i++)
    {
        if(A[i]==',')
            A[i]=' ';
    }
    for(  int i=0; i<B.length(); i++)
    {
        if(B[i]==',')
            B[i]=' ';
    }
    int v;
    istringstream str1(A);//istringtream是一個string對象構造來的,istringtream類從一個
    //string對象讀取字符字符串構造字符串流的時候,空格會造成字符串參數的內部分界。利用分解獲取
    //的方法實際完成了到整型對象的轉換。
    while(str1>>v)
    {
        a.push_back(v);//對a賦值
    }
    istringstream str2(B);
    while(str2>>v)
    {
        b.push_back(v);
    }
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
}
void get()//開始相加
{   c.clear();
 
    int carry=0;
    int la=a.size();
    int lb=b.size();
    int v=0;
    for(  int i=0; i<(la>lb?la:lb); i++)
    {
        if(i>=la)
            v=b[i]+carry;
        else if(i>=lb)
            v=a[i]+carry;
        else
            v=a[i]+b[i]+carry;
        c.push_back(v%p[i]);
        carry=v/p[i];
        if(i==(la>lb?la:lb)-1&&carry!=0)
        {
            c.push_back(carry);
 
        }
 
    }
    reverse(c.begin(),c.end());//相加完要反轉;
    for( int i=0;i<c.size();i++){//別輸出多了。
        if(i==c.size()-1){
            cout<<c[i]<<endl;
            break;
        }
        cout<<c[i]<<",";
    }
 
}
int main()
{
    while(cin>>A>>B&&A!="0"&&B!="0")
    {
       toint();
       get();
    }
    return  0;
 
}
 
/**************************************************************
    Problem: 1016
    User: roye
    Language: C++
    Result: Accepted
    Time:10 ms
    Memory:1552 kb
****************************************************************/

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