2020年9月青少年C/C++软件编程(二级)等级考试试卷及答案解析T3.大整数加法

大整数加法

求两个不超过 200 位的非负整数的和。

输入

有两行,每行是一个不超过 200 位的非负整数,可能有多余的前导 0。

输出

一行,即相加后的结果。结果里不能有多余的前导 0,即如果结果是 342,那么就不能输出为 0342。

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

解析

高精加法的模板题,注意前导零的处理即可。可以加数先处理掉前导零,也可以结果去掉前导零

#include 
using namespace std;
string s1,s2;
int a[205];
int b[205];
int main()
{
    cin>>s1;
    a[0]=s1.length();
    for (int i=a[0]-1;i>=0;i--)//转化为数组 a0为长度
    {
        a[a[0]-i]=s1[i]-'0';
    }
    for (int i=a[0];i>=1;i--)//去掉前导零
    {
        if (a[i]==0)
        {
            a[0]--;
        }else
        {
            break;
        }
    }
    cin>>s2;
    b[0]=s2.length();
    for (int i=b[0]-1;i>=0;i--)
    {
        b[b[0]-i]=s2[i]-'0';
    }
    for (int i=b[0];i>=1;i--)
    {
        if (b[i]==0)
        {
            b[0]--;
        }else
        {
            break;
        }
    }
    int c=0;//进位
    int maxlen=max(a[0],b[0]);//加数和被加数的最大长度
    for (int i=1;i<=maxlen;i++)//加法运算
    {
        a[i]=a[i]+b[i]+c;
        c=a[i]/10;
        a[i]%=10;
    }
    if (c>0)//判断最高位是否进位
    {
        a[0]=maxlen+1;
        a[a[0]]=c;
    }else
    {
        a[0]=maxlen;
    }
    for (int i=a[0];i>=1;i--)//输出结果
    {
        cout<

你可能感兴趣的:(电子学会C++二级,c++,算法,数据结构)