A+B Problem(高精)
题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。 a , b ≤ 1 0 500 a,b \leq 10^{500} a,b≤10500。
输出格式
输出只有一行,代表 a + b a+b a+b 的值。
样例 #1
样例输入 #1
1
1
样例输出 #1
2
样例 #2
样例输入 #2
1001
9099
样例输出 #2
10100
分析
这道题加数
a
a
a和加数
b
b
b的最大值为
1
0
500
10^{500}
10500,即使开long long
也不够,所以要用数组来表示两个加数,用代码模拟出加法竖式的过程
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
char A[505]={},B[505]={};//申请字符数组是因为只有字符数组或字符串能不带空格输入
int a[505]={},b[505]={},sum[505]={};//定义两个加数以及和的数组
cin >> A >> B;//输入两个加数
int lena=strlen(A),lenb=strlen(B);//求出位数
for(int i=0;i<lena;i++)//转换加数a
{
a[i] = A[lena-i-1]-'0';
}
for(int i=0;i<lenb;i++)//转换加数b
{
b[i] = B[lenb-i-1]-'0';
}
int lens=0,c=0;//定义当前执行位数和进位
while(lens<max(lena,lenb))//开始计算
{
sum[lens] = (a[lens]+b[lens]+c)%10;
c = (a[lens]+b[lens]+c)/10;
lens++;
}
if(c)//特判最高位要进位
{
sum[lens] += c;
lens++;
}
for(int i=lens-1;i>=0;i--)//倒序输出
{
cout << sum[i];
}
cout << endl;
return 0;//程序出口
}
本蒟蒻用的是最拉跨的写法(大佬勿喷),这道题不是很难,主要是得理清逻辑,不然很容易晕
下面是其他人这道题的题解:
版权:Lqingyyyy
版权:记录算法题解