首页 > 代码库 > 九度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版,整型存储不下
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。