题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b≤10^500
输出格式
输出只有一行,代表a+b的值
输入输出样例
输入 #1
1 1
输出 #1
2
输入 #2
1001 9099
输出 #2
10100
分析:
本题是一道模板题,用数组模拟长整数,也就是说用数组的每一位记录该数字的每一位。
高精度加法的实质就是竖式加法,核心是进位,当产生进位时,保留该处数字的个位,然后把十位上的数字加到下一位。
by:《深入浅出程序设计竞赛》
数 第四位 第三位 第二位 第一位 a 5 1 4 b 4 9 5 中间产物 9 10 9 处理进位1 10 0 9 处理进位2 1 0 0 0 结果 1 0 0 9
我们必须从低位到高位处理进位,即先处理前一处的进位,才会发现这一处也需要进位。
即:
void add()
{
len=max(A.size(),B.size());
for(int i=0;i<len;i++)
{
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
if(c[len])
{
len++;
}
}
另外读入时要注意从后往前读入,完整代码为:
#include<iostream>
#include<string>
using namespace std;
const int N=1e6;
int a[N],b[N],c[N];
string A,B;
int len;
void add()
{
len=max(A.size(),B.size());
for(int i=0;i<len;i++)
{
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
if(c[len])
{
len++;
}
}
int main()
{
cin>>A>>B;
for(int i=A.size()-1,j=0;i>=0;i--,j++)
{
a[j]=A[i]-'0';
}
for(int i=B.size()-1,j=0;i>=0;i--,j++)
{
b[j]=B[i]-'0';
}
add();
for(int i=len-1;i>=0;i--)
{
cout<<c[i];
}
return 0;
}