HDU - 1002 A + B Problem II (高精度加法

数的位数过长,就要用数组保存数了。
关于高精度的算法学习也是去的其他的地方偷师。
其他人的教程很详细,我在这儿就不赘述了

如果抱着学习高精度计算的话,强烈安利推荐一波:
https://www.cnblogs.com/ECJTUACM-873284962/p/6509429.html

这道题关于加法,题意很简单,但是有坑!!!

一开始的各种犯傻,然后以为前导0 会影响(其实不影响)
一直wa…
然后这个题的格式也是怪怪的,,,,
一直格式错误pe…

如图:
在这里插入图片描述
在这里插入图片描述
最后实在不行了,请教我亲爱的宇哥,,,,
可算A出来了。

闲话少说,上代码:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char s1[1000+20], s2[1000+20];
int a[1000+20], b[1000+20];
int main()
{
    int t, cnt = 0;
    cin >> t;
    while(t--)
    {
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
        cin >> s1 >> s2;
        a[0] = strlen(s1);
        b[0] = strlen(s2);
        for(int i = 1; i <= a[0]; ++i)
            a[i] = s1[a[0]-i] - '0';
        for(int j = 1; j <= b[0]; ++j)
            b[j] = s2[b[0]-j] - '0';

        int k = a[0] > b[0]? a[0]: b[0];
        for(int i = 1; i <= k; ++i)
        {
            a[i+1] += (a[i]+b[i])/10;
            a[i] = (a[i]+b[i])%10;
        }
        if(a[k+1] > 0)
            a[0] = k+1;
        else
            a[0] = k;
            
        printf("Case %d:\n%s + %s = ",++cnt,s1,s2);
        for(int i = a[0]; i >= 1; --i)
            cout << a[i];
        cout << endl;
        if(t)
            cout << endl; //代码的点睛之笔,类似于水仙花数最后一个数不能有空格,
            //所以最后一个样例不能有两个空行
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44031744/article/details/88045532
今日推荐