题解 | 学习 | 洛谷 | A+B Problem(高精)
·
P1601 A+B Problem(高精)
题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。$a,b \leq 10^{500}$。
输出格式
输出只有一行,代表 $a+b$ 的值。
输入输出样例 #1
输入 #1
1
1
输出 #1
2
输入输出样例 #2
输入 #2
1001
9099
输出 #2
10100
说明/提示
$20%$ 的测试数据,$0\le a,b \le10^9$;
$40%$ 的测试数据,$0\le a,b \le10^{18}$。
【题解】
高精度简单的思路:
就是把输入的长长长数每一位都拿数组存起来,进行像列竖式一样的运算。
数组从右向左存或从左向右存都一样,这里用的是前者,也就是把数组的最后一个当个位。
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
int a[5001]={},b[5001]={},c[5001]={},len,i;//数组a是第一个数,b是第二个数,c存它们两个的和
string s;
int main()
{
cin>>s;//输入第一个数
for(i=0;i<=s.size();i++)
{
a[5001-s.size()+i]=s[i]-'0';//存进数组
}
cin>>s;//输入第二个数
for(i=0;i<=s.size();i++)
{
b[5001-s.size()+i]=s[i]-'0';//存进数组
}
for(i=5000;i>=1;i--)
{
c[i]=a[i]+b[i]+c[i];//加起来
c[i-1]+=c[i]/10;//进位
c[i]%=10;
}
len=0;
while(c[len]==0 and len!=5000)len++;//这个的主要作用是去掉数组前面的0,所以前面定义时要清零呐
for(i=len;i<=5000;i++)
cout<<c[i];//输出
return 0;
}
更多推荐



所有评论(0)