Jobdu 題目1016 火星A B

2022-09-15 23:09:12 字數 1278 閱讀 3241

題目描述:讀入兩個不超過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

跟大數運算加法有點像,對於大數運算第一位都是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進製的,十位數...