牛客小白月赛30

题意

牛牛的加法不进位,7+7本来等于4进1,在牛牛这里等于4
问按牛牛的算法两个数相加的结果是多少

解题思路

这一题比高精度加法要容易,但是有一些易错的地方

首先要考虑两个数位数不同的情况,12+3=15,是从右往左加,而不是12+3=42

其次要考虑前导零的情况,正常的数不会是06,而应该只是6

还需要考虑结果为0的情况,不能没有输出

AC代码

#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
#define ll long long
//不要再爆long long了!!!!!!!!不要再爆long long了!!!!!!!

int main()
{
    string a, b,ans;
    cin >> a >> b;
    int la = a.size(), lb = b.size();
    if (la < lb)
    {
        int diff = lb - la;
        for (int i = 0; i < diff; i++)
        {
            // putchar(b[i]);
            ans+=b[i];
        }
        for (int i = 0; i < la; i++)
        {
            int t = a[i] + b[i + diff] - '0' * 2;
            // printf("%d", t % 10);
            ans+=t%10+'0';
        }
    }
    else if (la > lb)
    {
        int diff = la - lb;
        for (int i = 0; i < diff; i++)
        {
            // putchar(a[i]);
            ans+=a[i];
        }
        for (int i = 0; i < lb; i++)
        {
            int t = b[i] + a[i + diff] - '0' * 2;
            //printf("%d", t % 10);
            ans+=t%10+'0';
        }
    }
    else
    {
        fi(i, 0, la)
        {
            int t = a[i] + b[i] - '0' * 2;
            //printf("%d", t % 10);
            ans+=t%10+'0';
        }
    }
    bool sf=0;
    int lans=ans.size();
    for(int i=0;i<lans;i++)
    {
        //if(!sf&&ans[i]=='0');
        if(sf||ans[i]!='0')sf=1,putchar(ans[i]);
    }
    if(!sf)putchar('0');
    puts("");
    return 0;
}

题解链接