牛客小白月赛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;
} 
京公网安备 11010502036488号