题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。a,b≤10^500。
输出格式
输出只有一行,代表 a+b 的值。
输入输出样例
输入 #1
1 1
输出 #1
2
输入 #2
1001 9099
输出 #2复制
10100
说明/提示
20%20% 的测试数据,0≤a,b≤10^9;
40%40% 的测试数据,0≤a,b≤10^18。
思路
由于题目上都说了,所以这道题必须必须必须必须必须必须必须须须得用高精度
所谓高精度,就是指通过模拟同位相加,进位来达到(理论上)接近无穷大的加数允许范围
废话不多说,直接上代码!
AC代码
#include<bits/stdc++.h>//万能头文件
using namespace std;//使用标准命名空间
string A,B;//两个字符串
string addh(string a,string b)//高精度函数,模拟加的过程
{
const int L=1000000;
string ans;
int na[L]={0},nb[L]={0};
int la=a.size(),lb=b.size();
//同位相加
//‘0’不可省
for(int i=0;i<la;i++)
na[la-1-i]=a[i]-'0';
for(int i=0;i<lb;i++)
nb[lb-1-i]=b[i]-'0';
int lmax=la>lb?la:lb;//三目运算符
for(int i=0;i<lmax;i++)
{
na[i]+=nb[i];
na[i+1]+=na[i]/10;
na[i]%=10;
}
if(na[lmax])
lmax++;
//倒着给最终值赋值
for(int i=lmax-1;i>=0;i--)
ans+=na[i]+'0';
return ans;
}
int main()
{
cin>>A>>B;//数据输入
cout<<addh(A,B);//结果输出
return 0;
}