与高精度加法同理,只是需要处理一下长短问题而已
/* * @Author: Gehrychiang * @Date: 2020-02-01 10:32:54 * @Website: www.yilantingfeng.site * @E-mail: gehrychiang@aliyun.com */ #include <bits/stdc++.h> using namespace std; const int MAXN = 1000001; char a[MAXN]; char b[MAXN]; char c[MAXN]; bool cmp(char a[], char b[])//自定义比较函数 { if (strlen(a) != strlen(b)) { return strlen(a) > strlen(b); } else { if (strcmp(a, b) >= 0) return true; else return false; } } int main() { cin >> a >> b; int flag = 0; if (cmp(a, b)) { flag = 1; //正 } else { swap(a, b); flag = -1; } int p = 0; int len_a = strlen(a); int len_b = strlen(b); int tmp = 0; //当前位 int nex = 0; //下位借 c[p] = '0'; while (a[0] != '0' || b[0] != '0' || nex != 0) //a或b的最高位不为0即继续 { c[p] = '0'; tmp -= nex; nex = 0; tmp += a[max(len_a - 1 - p, 0)] - '0' - b[max(len_b - 1 - p, 0)] + '0'; a[max(len_a - 1 - p, 0)] = '0'; b[max(len_b - 1 - p, 0)] = '0'; if (tmp < 0) { tmp += 10; nex += 1; } c[p] += tmp; tmp = 0; ++p; } int len_c = strlen(c); int lala = 0;//用来记录是否输出了第一个非0的数 if(flag==-1) { cout<<"-"; } for (int i = len_c - 1; i >= 0; i--) { if (c[i] != '0') { cout << c[i]; lala = 1; } if (c[i] == '0' && lala) { cout << c[i]; } } if(lala==0) { cout<<"0"<<endl; } return 0; }