Acwing.792.高精度减法

319 阅读1分钟

www.acwing.com/problem/con…

本题与高精度加法类似,主要是考察coding能力,具体看代码即可

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

using namespace std;

bool cmp(vector<int> &num1, vector<int> &num2) {
    if(num2.size() > num1.size()) return true;
    if(num2.size() == num1.size()) {
        for(int i = num1.size() - 1; i >= 0; --i) {
            if(num1[i] > num2[i]) return false;
            else if(num2[i] > num1[i]) return true;
        }
    }
    
    return false;
}

void sub(vector<int> &num1, vector<int> &num2) {
    
    vector<int> res;
    
    for(int i = 0, t = 0; i < num1.size(); ++i) {
        t = num1[i] - t;
        if(i < num2.size()) t = t - num2[i];
        
        res.push_back((t + 10) % 10);
        if(t < 0) t = 1;
        else t = 0;
    }
    
    while(res.size() > 1 && res.back() == 0) res.pop_back();
    
    for(int i = res.size() - 1; i >= 0; --i) printf("%d", res[i]);
    printf("\n");
}

int main() {
    string str1, str2;
    cin >> str1 >> str2;
    
    vector<int> num1, num2;
    
    for(int i = str1.size() - 1; i >= 0; --i) num1.push_back(str1[i] - '0');
    for(int i = str2.size() - 1; i >= 0; --i) num2.push_back(str2[i] - '0');
    
    if(cmp(num1, num2)) {
        cout << "-";
        sub(num2, num1);
    } else
        sub(num1, num2);
    
    return 0;
}