牛客小白月赛30-E-牛牛的加法
牛客小白月赛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; }