高精度算法(减法)
#include <bits/stdc++.h>
using namespace std;
char s1[10086], s2[10086], s3[10086];
int a[10086], b[10086], c[10086];
int flag = 0;
int u, v;
bool qwe(char s1[], char s2[]) {
u = strlen(s1);
v = strlen(s2);
//判断两个数的长度是否相等
if (u != v)
//如果不相等,就判断数a是否小于数b,
//如果是的话,就返回true
return u < v;
//如果a和b的位数相对,就返回flase;
return false;
}
int main() {
scanf("%s", s1);
scanf("%s", s2);
//调用上面的布尔函数,
//如果a长度小于b,就给他们换位置
if (qwe(s1, s2)) {
flag = 1;//标记是否被换位
strcpy(s3, s1);
strcpy(s1, s2);
strcpy(s2, s3);
}
int la = strlen(s1);
int lb = strlen(s2);
for (int i = 0; i < la; i++)
a[la - i] = s1[i] - '0';
//让数颠倒;个位在前面,从前面开始算
for (int i = 0; i < lb; i++)
b[lb - i] = s2[i] - '0';
int c0 = max(u, v);
for (int i = 1; i <= c0 ; i++) {
if (a[i] < b[i]) {//如果当前的第i位数,a<b
a[i + 1] -= 1;//就向a的下一位借1;
c[i] = a[i] + 10 - b[i];
continue;
}
c[i] = a[i] - b[i];//如果a[i]不大于b[i],就直接减
}
while (c[c0] == 0 && c0 > 1)
c0--;//如果第一位数是0,就减去,且c至少有一位,不包含前面的0
if (flag == 1) {
printf("-");//是被换过为,输出一个负号,因为是负数
}
for (int i = c0 ; i > 0; i--) {
printf("%d", c[i]);//然后倒叙输出
}
return 0;
}