題目描述:讀入兩個不超過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,0
1 10,6,4,2,1
0 0
樣例輸出:
1,0,11,1,1,0
1,0,0,0,0,0
跟大數運算加法有點像,對於大數運算第一位都是10進製,在取值時,需要模10,在這裡只要模上該位對應的素數就ok了。
先建乙個30位的素數表,判斷n是否素數時只需檢查n是否能被1到sqrt(n)之間的素數整除,這些素數可以從表裡取得。若n是素數則將其加到表裡。
**如下:
#include #include #include #include #include using namespace std;string a,b;
int p[30];
vectora,b,c;
void init()
}if(flag)
}}void toint()
istringstream sinb(b);
while(sinb>>v)
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
}void getres()
else if(i>=lb)
else
c.push_back(v%p[i]);
carry = v/=p[i];
if(i==(la>lb?la:lb)-1&&carry!=0)
}reverse(c.begin(),c.end());
for(int i=0;i>a>>b&&a!="0"&&b!="0")
return 0;
}
題目1016 火星A B
題目描述 讀入兩個不超過25位的火星正整數a和b,計算a b。需要注意的是 在火星上,整數不是單一進製的,第n位的進製就是第n個素數。例如 地球上的10進製數2,在火星上記為 1,0 因為火星個位數是2進製的 地球上的10進製數38,在火星上記為 1,1,1,0 因為火星個位數是2進製的,十位數是3...
題目1016 火星A B
題目描述 讀入兩個不超過25位的火星正整數a和b,計算a b。需要注意的是 在火星上,整數不是單一進製的,第n位的進製就是第n個素數。例如 地球上的10進製數2,在火星上記為 1,0 因為火星個位數是2進製的 地球上的10進製數38,在火星上記為 1,1,1,0 因為火星個位數是2進製的,十位數是3...
九度OJ 題目1016 火星A B
一.題目描述 讀入兩個不超過25位的火星正整數a和b,計算a b。需要注意的是 在火星上,整數不是單一進製的,第n位的進製就是第n個素數。例如 地球上的10進製數2,在火星上記為 1,0 因為火星個位數是2進製的 地球上的10進製數38,在火星上記為 1,1,1,0 因為火星個位數是2進製的,十位數...