给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤10^5
输入样例:
32
11
输出样例:
21
方法一:
模拟手算
先把数字的低位和高位互换,变成个位在下标0处,比较好写。注意最后高位的无效0不要输出
#include <bits/stdc++.h>
using namespace std;
char a[100010], b[100010];
int main() {
scanf("%s%s", &a, &b);
int la = strlen(a) - 1, lb = strlen(b) - 1;
char *ta = a, *tb = b;
if (lb > la || lb == la && strcmp(a, b) < 0) {
printf("-");
swap(ta, tb);
swap(la, lb);
}
// invert
for (int i = 0; i <= la/2; i++) swap(ta[i], ta[la-i]);
for (int i = 0; i <= lb/2; i++) swap(tb[i], tb[lb-i]);
int c = 0, p, i;
for (i = 0; i <= lb; i++) {
p = ta[i] - tb[i] - c;
c = p < 0; if (p < 0) p += 10;
ta[i] = p + '0';
}
while (i <= la && c) {
p = ta[i] - c - '0';
c = p < 0; if (p < 0) p += 10;
ta[i] = p + '0';
i++;
}
while (la > 0 && ta[la] == '0') la--;
for (; la >= 0; la--) printf("%c", ta[la]);
}