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;
}

Logo

集算法之大成!助力oier实现梦想!

更多推荐