知识铺垫(高精度算法):
在C/C++中,我们经常会碰到限定数据范围的情况,
C++规定:
int占32位,即4个字节,即int的范围是[-231,231-1],为10^9数量级
long long占64位,即8个字节,即long long的范围是[-263,263-1],为10……18数量级
如果超过该数量级,则需引入高精度算法。
1.高精度加法
A+B Problem(高精)
题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。a,b<=10^500。
输出格式
输出只有一行,代表 $a+b$ 的值。
样例 #1
样例输入 #1
1
1
样例输出 #1
2
样例 #2
样例输入 #2
1001
9099
样例输出 #2
10100
提示
$20%$ 的测试数据,0<=a,b<=10^9;
$40%$ 的测试数据,0<=a,b<=10^18。
#include<cstring>
char s1[505],s2[505];
int a[505],b[505],c[505];
using namespace std;
int main()
{
int la,lb,lc;// la: s1的长度, lb: s2的长度, lc: 结果的长度
// 输入两个大数的字符串表示
cin>>s1;
cin>>s2;
// 计算输入字符串的长度
la=strlen(s1);
lb=strlen(s2);
// 将第一个字符串的数字转换为整数数组(反向存储)
for(int i=0; i<la; i++)
{
a[la-i]=s1[i]-'0'; // s1[i] 转换为数字并存储在 a 中
}
// 将第二个字符串的数字转换为整数数组(反向存储)
for(int i=0; i<lb; i++)
{
b[lb-i]=s2[i]-'0';// s2[i] 转换为数字并存储在 b 中
}
// 设置结果的最大可能长度
lc=max(la,lb)+1;// 加一是为了处理可能的进位
// 进行大数相加
for(int i=1; i<=lc; i++)
{
c[i]+=a[i]+b[i];// 对应位相加
c[i+1]=c[i]/10;// 计算进位
c[i]=c[i]%10; // 当前位数值
}
// 去掉结果前面的零
if(c[lc]==0&&lc>0)lc--;
// 输出最终结果
for(int i=lc; i>0; i--)
cout<<c[i];// 从高位到低位输出
return 0;
}
标签:lc,int,s2,s1,样例,蓝桥,格式,505
From: https://www.cnblogs.com/zzzxyy/p/18432202