给出两个大整数 A,B,求他们的差 A−B。
输入格式
读入两行,第一行为整数 A,第二行为整数 B。
整数的位数不超过 10000。
输出格式
输出一个整数,表示 A−B。
输出时每行末尾的多余空格,不影响答案正确性
要求使用「文件输入输出」的方式解题,输入文件为 subtraction.in
,输出文件为 subtraction.out
样例输入复制
92389122013012030212
100000000000000000001
样例输出复制
-7610877986987969789
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("subtraction.in", "r", stdin);
freopen("subtraction.out", "w", stdout);
char a[10005], b[10005];
int c[10005] = {0}, d[10005] = {0};
scanf("%s%s", &a, &b);
int n, m;
n = strlen(a);
m = strlen(b);
if (n < m || n == m && strcmp(a, b) < 0) {
cout << "-";
swap(n, m);
swap(a, b);
}
for (int i = 0; i < n; i++) {
c[i] = a[n - i - 1] - '0';
}
for (int i = 0; i < m; i++) {
d[i] = b[m - i - 1] - '0';
}
int sum[105] = {0};
for (int i = 0; i < n; i++) {
sum[i] = c[i] - d[i];
if (sum[i] < 0) {
sum[i] += 10;
c[i + 1]--;
}
}
int t = n;
while (sum[t] == 0 && t > 0) {
t--;
}
for (int i = t; i >= 0; i--) {
cout << sum[i];
}
return 0;
}
错误信息如下:
已通过 13 组测试数据,共 20 组
第12行,应该改成if (n < m || (n == m && strcmp(a, b) < 0)),少了个括号