高精度算法(減法)
#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);
//判斷兩個數(shù)的長度是否相等
if (u != v)
//如果不相等,就判斷數(shù)a是否小于數(shù)b,
//如果是的話,就返回true
return u < v;
//如果a和b的位數(shù)相對,就返回flase;
return false;
}
int main() {
scanf("%s", s1);
scanf("%s", s2);
//調(diào)用上面的布爾函數(shù),
//如果a長度小于b,就給他們換位置
if (qwe(s1, s2)) {
flag = 1;//標(biāo)記是否被換位
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';
//讓數(shù)顛倒;個位在前面,從前面開始算
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]) {//如果當(dāng)前的第i位數(shù),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--;//如果第一位數(shù)是0,就減去,且c至少有一位,不包含前面的0
if (flag == 1) {
printf("-");//是被換過為,輸出一個負(fù)號,因?yàn)槭秦?fù)數(shù)
}
for (int i = c0 ; i > 0; i--) {
printf("%d", c[i]);//然后倒敘輸出
}
return 0;
}