#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,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解题思路: 将火星数字提取出来转化成int,再计算2个int的和,在转化成火星数字。 问题:25位火星数字,超过int,甚至long long,未ac
时间: 2024-10-07 05:06:49