首页 > 代码库 > 九度OJ 1016 火星A + B 未AC版,整型存储不下

九度OJ 1016 火星A + B 未AC版,整型存储不下

#include <iostream>#include <string.h>#include <sstream>#include <math.h>#include <vector>#include <algorithm>using namespace std;int susuTable[28]={1};bool isLear(int num){    if(num==2)        return true;    else    {        int i = 2;        for(;i<=sqrt(num);i++)        {            if(num%i == 0)                return false;        }        return true;    }}void setArr(int arr[]){    int i = 2;    int totalBit = 1;    while(totalBit!=28)    {        if(isLear(i) ==true)        {            arr[totalBit] = i;            totalBit++;        }        i++;    }}void display(int arr[]){    int i = 0;    for(;i<28;i++)    {        cout<<arr[i]<<" ";    }}long long sparkToInt(string spark){    long long Int_num = 0;    int len = spark.length();    if(len == 1)    {        Int_num = spark[0] - 0;        return Int_num;    }    int last=0;    int i = 0;    for(;i<len;i++)        if(spark[i]==,)            last++;    i = 0;    int temp = 0;    while(i!=len)    {        temp = 0;        while(spark[i]!=, && i!=len)        {            temp = temp*10 + (int)(spark[i]-0);            i++;        }        Int_num += temp;        Int_num *= susuTable[last--];        if(i==len)            break;        else        {            i++;        }    }    return Int_num;}int main(){    string num_a,num_b;    setArr(susuTable);    display(susuTable);    //cout<<endl;    cin>>num_a>>num_b;    while(!(num_a =="0" || num_b=="0"))    {        long long a = sparkToInt(num_a);        long long b = sparkToInt(num_b);        //cout<<endl<<a<<" "<<b<<endl;        long long add = a+b;        //cout<<add<<endl;        string result="";        int index = 1;        while(add!=0)        {            ostringstream ost;            ost<<add%susuTable[index];            string temp(ost.str());            //result.insert(result.begin(),add%susuTable[index]+"");            temp.append(result);            result = temp;            //result.push_back((char)(add%susuTable[index]));            //cout<<add%susuTable[index];            add = add/susuTable[index];            if(add!=0)            {                result.insert(result.begin(),,);            }            index++;        }        cout<<result<<endl;        num_a.clear();        num_b.clear();        cin>>num_a>>num_b;    }    return 1;}
题目描述:
    读入两个不超过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
解题思路:
  将火星数字提取出来转化成int,再计算2个int的和,在转化成火星数字。
  问题:25位火星数字,超过int,甚至long long,未ac

九度OJ 1016 火星A + B 未AC版,整型存储不下