【题目描述】
求两个大的正整数相减的差。
【输入】
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
【输出】
一行,即所求的差。
【输入样例】
9999999999999999999999999999999999999
9999999999999
【输出样例】
9999999999999999999999990000000000000
【参考程序】
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define SIZE 2001
int main() {
char a1[SIZE], b1[SIZE], t[SIZE];
int x, lena, lenb, a[SIZE], b[SIZE];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
gets(a1);
gets(b1);
if ((strlen(a1)<strlen(b1)) || ((strlen(a1)==strlen(b1)) && (strcmp(a1,b1)<0))) {
strcpy(t, a1); // 判断如果减数比被减数大,则交换两者,并输出“-”
strcpy(a1, b1);
strcpy(b1, t);
cout << "-";
}
lena = strlen(a1);
lenb = strlen(b1);
for (int i=0; i<lena; i++) {
a[lena-i] = a1[i] - 48; // 字符串被减数 存入 整型数组a,且倒序存储
}
for (int i=0; i<lenb; i++) {
b[lenb-i] = b1[i] - '0'; // 字符串减数 存入 整型数组b,且倒序存储
}
for (int i=1; i<=lena; i++) {
a[i] -= b[i]; // 将被减数的每一位分别减去减数的每一位
if (a[i] < 0) { // 如果不够减,就向前一位借10
a[i] += 10;
a[i+1]--;
}
}
while (a[lena] == 0) { // 去掉前面多余的0
lena--;
}
for (int i=lena; i>=1; i--) {
cout << a[i];
}
return 0;
}