problem description
讀入兩個不超過25位的火星正整數a和b,計算a+b。需要注意的是:在火星上,整數不是單一進製的,第n位的進製就是第n個素數。例如:地球上的10進製數2,在火星上記為「1,0」,因為火星個位數是2進製的;地球上的10進製數38,在火星上記為「1,1,1,0」,因為火星個位數是2進製的,十位數是3進製的,百位數是5進製的,千位數是7進製的……
input
測試輸入包含若干測試用例,每個測試用例佔一行,包含兩個火星正整數a和b,火星整數的相鄰兩位數用逗號分隔,a和b之間有乙個空格間隔。當a或b為0時輸入結束,相應的結果不要輸出。
output
對每個測試用例輸出1行,即火星表示法的a+b的值。
sample input
1,0 2,1 4,2,0 1,2,0 1 10,6,4,2,1 0 0
sample output
1,0,1 1,1,1,0 1,0,0,0,0,0
將兩種演算法結合起來求解
#include#include#include#include#include#include#includeusing namespace std;
int prime[26];
char num1[1000];
char num2[1000];
void is_prime()
if(ok)prime[cnt++]=i;
if(cnt>=26)break;
}}int main()
weight=0;
for(;pos2>=0;pos2--)
s.push((x+r)%prime[digit]);
r=(x+r)/prime[digit];
pos1--;pos2--;digit++;
}if(r) s.push(r);
printf("%d",s.top());s.pop();
while(!s.empty()) printf(",%d",s.top()),s.pop();
printf("\n");
}return 0;
}
順便帖一下劉老師的大數演算法
#include#include#include#include#include #includeusing namespace std;
struct biginteger // 建構函式 給建構函式的引數提供預設值
biginteger operator = (long long num) while (num > 0);
return *this;
} biginteger operator = (const string& str)
return *this;
} biginteger operator + (const biginteger& b) const
return c;
}};ostream& operator << (ostream &out, const biginteger& x)
return out;
}istream& operator >> (istream &in, biginteger& x)
#include#includesets;
mapm;
int main()
hdu 1230(火星A B,進製)
個人感覺如果進製轉換的話太麻煩,直接模擬加法,不同位數採用不同的進製加法。但是還是wa了兩次,沒有處理好餘數的問題,當不能進製時。2013 04 23 cpp include stdio.h include string.h include math.h int prime 25 cnt void ...
hdu 1002大數加法
include includevoid daoxu int str,int n 定義乙個倒序陣列的函式,n為陣列中元素個數 void daoxu int str,int n else 找出最長數 for int i 0 i 0 j printf for maxline 0 maxline print...
1005 大數加法
1005 大數加法 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 題目位址 給出2個大整數a,b,計算a b的結果。input 第1行 大數a 第2行 大數b a,b的長度 10000 需注意 a b有可能為負數 output 輸出a binput示例 68932147...