高精度加法
题目描述
修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A、B的和,其中A和B的位数在5000位以内。
输入
共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在5000以内。
输出
输出一个非负数,即两数之和。
样例输入
1111111111 | |
---|---|
2222222222 |
样例输出
3333333333 |
---|
解析:
- 首先,要用字符串输入,而且字符串数组要开的大一下;
- 其次,把字符串倒序赋值到两个整型数组中;
- 再次,比较大小,进行加减(注意进位问题);
- 最后,输出。
代码如下:
#include<bits/stdc++.h>
using namespace std;
char sa[10001],sb[10001];
int main()
{
int a[10001]={0},b[10001]={0},c[10001]={0},la,lb,d=0,s,t,i,j,k;
cin>>sa>>sb;
la=strlen(sa);
lb=strlen(sb);
for(i=0;i<la;i++)
a[i]=sa[i]-'0';
for(i=0;i<lb;i++)
b[i]=sb[i]-'0';
for(i=0;i<la/2;i++)
{
t=a[i];
a[i]=a[la-i-1];
a[la-i-1]=t;
}
for(i=0;i<lb/2;i++)
{
t=b[i];
b[i]=b[lb-i-1];
b[lb-i-1]=t;
}
k=la>lb?la:lb;
i=0;d=0;
while(i<k)
{
s=a[i]+b[i]+d;
c[i]=s%10;
d=s/10;
i++;
}
if(d)
c[i]=d;
else
i--;
s=0;
while((c[i]==0)&&(i>=0))i--;
if(i<0)
cout<<'0';
else
for(;i>=0;i--)cout<<c[i];
return 0;
}