HDOJ 1002 A + B Problem II
阿新 • • 發佈:2020-11-21
題目描述
我有一個非常簡單的問題要問你。給定兩個整數A和B,你要做的就是計算A + B的和。
input
輸入的第一行包含整數T(1 <= T <= 20),表示測試用例的數量。 然後是T行,每行包含兩個正整數,A和B.請注意,整數非常大,這意味著您不應該使用32位整數來處理它們。 您可以假設每個整數的長度不超過1000
output
對於每個測試用例,您應輸出兩行。 第一行是“Case#:”,#表示測試用例的編號。 第二行是方程“A + B = Sum”,Sum表示A + B的結果。注意方程中有一些空格。 在兩個測試用例之間輸出一個空行。
思路分析
這是一個大數問題,輸入的值不能用常見的int long 等來表示,因此考慮字元陣列儲存然後逐位相加
重點在於:進位
最後要注意輸出的格式,最後一個輸出後不用換行
原始碼
#include<iostream> #include<cstring> using namespace std; char a[1010],b[1010],c[1010],d[1010]; int main() { int n,len,count=0; cin>>n; while(n--){ count+=1; cin>>a>>b; int len1 = strlen(a); int len2 = strlen(b); int t1=0; //將a串反轉 for(int i=len1-1;i>=0;i--){ c[t1] = a[i]; ++t1; } t1=0; //將b串反轉 for(int i=len2-1;i>=0;i--){ d[t1] = b[i]; ++t1; } //補位 if(len1>len2){ len = len1; for(int i=len2;i<len1;i++) { d[i] = '0'; } }else{ len = len2; for(int i=len1;i<len2;i++) { c[i] = '0'; } } //逐個相加 int a1,b1,t=0; for(int i=0;i<len;i++){ a1 = c[i]-'0'; b1 = d[i]-'0'; d[i] = (a1+b1+t)%10+'0';//本位 t = (a1+b1+t)/10;//進位 } cout<<"Case "<<count<<":"<<endl; cout<<a<<" "<<"+ "<<b<<" = "; //輸出 這裡判斷一下最高位是否需要進位,是則給最高位賦值進位,否不用管 if(t!=0){ d[len]=t+'0'; } for(int i=len-1;i>=0;i--) cout<<d[i]; if(n!=0) cout<<endl<<endl; else cout<<endl; } }