题目1198:a+b
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:10212
解决:3598
-
题目描述:
-
实现一个加法器,使其能够输出a+b的值。
-
输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
-
输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
-
样例输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
-
样例输出:
-
8 10000000000010000000000000000000
-
来源:
- 2010年华中科技大学计算机研究生机试真题
-
-
#include <cstdio> #include <cstring> #include <iostream> using namespace std; struct BigInteger{ int digit[1000]; int size; void init(){ for(int i=0;i<1000;i++){ digit[i]=0; } size=0; } void set(string &a){ init(); int al=a.size(); int count=0; while(al>0){ switch(count){ case 0:digit[size]=a[--al]-'0';count++; break; case 1:digit[size]+=10*(a[--al]-'0');count++; break; case 2:digit[size]+=100*(a[--al]-'0');count++; break; case 3:digit[size]+=1000*(a[--al]-'0');count=0;if(al!=0)size++; break; default:break; } } } void print(){ //输出有技巧 printf("%d",digit[size]); for(int i=size-1;i>=0;i--){ printf("%04d",digit[i]); } printf("\n"); } BigInteger operator+(const BigInteger &b)const{ BigInteger ret; ret.init(); int carry=0; for(;;ret.size++){ ret.digit[ret.size]=(digit[ret.size]+b.digit[ret.size]+carry)%10000; carry=(digit[ret.size]+b.digit[ret.size]+carry)/10000; if(ret.size>=size&&ret.size>=b.size){ if(carry){ ret.size++; ret.digit[ret.size]=carry; break; }else{ break; } } } return ret; } }; struct BigInteger hugea; struct BigInteger hugeb; struct BigInteger hugec; int main(){ string a,b; while(cin>>a){ cin>>b; hugea.set(a); //hugea.print(); hugeb.set(b); //hugeb.print(); hugec=hugea+hugeb; hugec.print(); } return 0; }