好像好几个人的第2个和第10个测试点没有过啊

我也还没有过,不知道为啥。

// [7FOJ]高精度减法.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <string>
#include <cstdio>

using namespace std;
using VI = vector<int>;

bool cmp(VI& a, VI& b) {
    if (a.size() != b.size()) return a.size() > b.size();
    for (int i = 0; i < a.size(); ++i)
        if (a[i] != b[i]) return a[i] > b[i];
    return true;
}

VI sub(VI& a, VI& b) {
    VI c;
    for (int i = 0, t = 0; i < a.size(); ++i) {
        t = a[i] - t;
        if (i < b.size()) t -= b[i];
        c.push_back((t + 10) % 10);
        t = t < 0;
    }
    while (c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}

int main()
{
#ifdef _DEBUG
#pragma warning(disable: 4996)
    freopen("in.txt", "r", stdin);
#endif // _DEBUG

    string a, b;
    cin >> a >> b;
    VI A, B;
    for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');
    for (int i = b.size() - 1; i >= 0; --i) B.push_back(b[i] - '0');

    while (A.size() > 1 && A.back() == 0) A.pop_back();
    while (B.size() > 1 && B.back() == 0) B.pop_back();

    VI C;
    if (cmp(A, B)) {
        C = sub(A, B);
    }
    else {
        cout << '-';
        C = sub(B, A);
    }
    for (int i = C.size() - 1; i >= 0; --i) cout << C[i];
    cout << endl;

    return 0;
}

1 条评论

  • @ 2021-02-10 16:30:54

    此非本OJ题目,如果您对数据产生质疑,可以去7FOJ提问,谢谢

  • 1

信息

ID
1021
难度
3
分类
高精度 | 模拟 | 字符串 点击显示
标签
递交数
66
已通过
12
通过率
18%
上传者