题解 P1601 【A+B Problem(高精)】

· · 题解

以前的我最最讨厌的,就是在一个很不起眼的题目中,(本以为很简单可以AC) 一定要用到高精度才可以过,于是就无数次回避它,但今天重新回望它,才发现,原来我一直害怕的,也不过如此。

切入正题:

顾名思义,高精度加法,就是指在int以及long long int等无法承受的范围中运行,其思想类似于我们小学学的加法竖式。

如图:

上AC代码:

#include<iostream>
#include<cstring>
using namespace std;
int c[50300],a1[51000],b1[51000];
int main()
{
    string a,b;
    cin>>a>>b;
    int l=0,s=0;
    for(int i=a.length()-1;i>=0;i--)
        a1[i]=a[l++]-'0';  //将字符转化成数字的同时将字符串进行翻转(翻转类似于algorithm库中的severse函数)
    for(int i=b.length()-1;i>=0;i--)
        b1[i]=b[s++]-'0';
    int len=max(a.length(),b.length())+1;
    for(int i=0;i<len;i++)
    {
        c[i]=a1[i]+b1[i]+c[i];
        c[i+1]=c[i]/10;   //进位操作,将前一位得到的整十倍累加到后一位。
        c[i]=c[i]%10;//得到整理后的c数组
    }
    while(c[len-1]==0&&len>1)len--;  //一定要记得len>1
    for(int i=len-1;i>=0;i--)
        cout<<c[i];
}

最后强调几点问题: