题解 P2142 【高精度减法】
liangsheng · · 题解
在此题中用到了 struct结构体配合string使用。 废话不多,上代码。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct stu{
string a1;
int t; //用 t 做标记
};
int cmp(stu x, stu y) {
if(x.a1.size() < y.a1.size()) return 1; //从小到大排序
else if(x.a1.size() == y.a1.size() && x.a1 < y.a1) return 1;
else return 0;
}
int a[1000001], b[1000001];
int main() {
stu p[2];
for(int i = 0; i < 2; i++) { //输入
cin >> p[i].a1;
p[i].t = i; //做标记,最后会用到
}
if(p[0].a1 == p[1].a1) { //特判: 当两数相等 则输出0
cout << 0 << endl;
return 0;
}
sort(p, p + 2, cmp);
int len1 = p[1].a1.size(), len0 = p[0].a1.size(), len = len1; //此时p[1].a1 大于 p[0].a1, len1 大于 len2
for(int i = len1 - 1; i >= 0; i--) {
a[len1 - i - 1] = p[1].a1[i] - '0'; //char型 转化为 int 型
}
for(int i = len0 - 1; i >= 0; i--) {
b[len0 - i - 1] = p[0].a1[i] - '0'; //char 型转化为 int 型
}
for(int i = 0; i < len; i++) {
if(a[i] < b[i]) {
a[i + 1] -= 1;
a[i] += 10;
}
a[i] -= b[i];
}
while(a[len - 1] == 0) len--;
if(p[1].t > p[0].t) { //如果满足 p[1].t > p[0].t 证明被减数 比 减数 小, 则最后结果为负数
cout << '-';
}
for(int i = len - 1; i >= 0; i--) {
cout << a[i];
}
printf("\n");
return 0;
}
希望此题解对你有所帮助 第一次发题解,求过