P1601 A+B Problem(高精)(模板)
//高精度加法
//用数组存储超出存储范围内的数据
//希望两个加数的位数是一致的,两个数组的下标可以同一致的移动——补0对齐不就OK
//c[2]+=a[2]+b[2] 注意有进位一定是加等于
//c[3]=c[2]/10
//c[2]%=10
//以此循环就是逐位计算
//https://www.luogu.com.cn/problem/P1601?contestId=96607
//高精度加法(不用考虑负数)
//字符的数字转化为int型的数字 ’6‘-’0‘即可
//读入字符串-》转为数字-》加法——》消除前导零-》倒着输出
//注意要消除前导的零
#include<bits/stdc++.h>
using namespace std;
string x;
string y;
int a[10000],b[10000],c[10000],la,lb,lc;
int main()
{
cin>>x>>y;
la=x.length();
lb=y.length();
//转为对应的数字
for(int i=0;i<la;i++)
{
a[la-i]=x[i]-'0';//因为顺着输入字符串需要倒着存输入的string为123则string中最低为就是1而不是3,而字符串的最低为对应这十进制数字的最高位
//la为4即字符串下标为0123则s[0]应该对应a[4]刚好是la-i
// 则s[3]应该对应a[1]刚好是la-i
}
for(int i=0;i<lb;i++)
{
b[lb-i]=y[i]-'0';
}
lc=max(la,lb);
for(int i=1;i<=lc;i++)
{
//为啥是从c的第一位开始计算捏
//经过上述的转换十进制的数字就从下标一开始存了
c[i]+=a[i]+b[i];//进位加两个加数
c[i+1]=c[i]/10;//保存进位信息
c[i]%=10;//计算c[i]位的数值
}
//注意循环最后一次c[lc+1]可能会大于零
if(c[lc+1]>0) lc++;
//倒序输出消除前导零
for(int i=lc;i>=1;i--)
cout<<c[i];
return 0;
}