九度OJ 1016

来源:互联网 发布:dnf辅助dll源码论坛 编辑:程序博客网 时间:2024/05/24 02:56
题目描述:
    读入两个不超过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,14,2,0 1,2,01 10,6,4,2,10 0
样例输出:
1,0,11,1,1,01,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****************************************************************/

0 0