题目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; }