当前位置: 代码迷 >> 综合 >> 题目1198:a+b 九度OJ
  详细解决方案

题目1198:a+b 九度OJ

热度:72   发布时间:2023-09-24 06:34:18.0
题目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;
}


  相关解决方案