以前也有写过大数的A+B,前几天又碰到一个,自己敲了一个竟然漏洞百出。。哎
说思路:由于A B都特别特别大,所以我们只能以字符型数据输入,然后就要转化,将字符型转化成整型,不难,就不说了,然后就要模拟小学加法。。orz 设两个int数组 a[] b[] 接受输入的字符(转化),可以在a[0]放个位数,a[1]放十位数,以此类推。注意 0+0
#include <iostream> //大数A+B
#include <cstdio>
#include <algorithm>
#include <ctype.h>
#include <cstring>
using namespace std;
int main()
{
char a[100],b[100];
int x[200],y[200];
int i;
while(cin>>a>>b)
{
memset(x,0,sizeof(x)); //初始化
memset(y,0,sizeof(y));
int p=0;
for(i=strlen(a)-1;i>=0;i--) //将字符串数据转化成整型数据,以便进行模拟加法
x[p++]=a[i]-'0';
p=0;
for(i=strlen(b)-1;i>=0;i--)
y[p++]=b[i]-'0';
for(i=0;i<200;i++) //开始模拟加法
{
x[i]+=y[i];
if(x[i]>9) //进位
{
x[i]-=10;
x[i+1]++;
}
}
for(i=199;i>=0;i--)
if(x[i]!=0) //去除前导0
break;
int flag=i;
if(flag==-1) //将 0+0 的情况排除 (WA一次 。。orz)
cout<<"0"<<endl;
else
{
for(i=flag;i>=0;i--)
cout<<x[i];
cout<<endl;
}
}
return 0;
}