题解 P2142 【高精度减法】

· · 题解

在此题中用到了 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;
}

希望此题解对你有所帮助 第一次发题解,求过