C++自存错题(16)高精减

题目描述
高精度减法。

输入格式
两个整数 a,b(第二个可能比第一个大)。

输出格式
结果(是负数要输出负号)。

输入输出样例
输入 #1复制

2
1
输出 #1复制

1
说明/提示
20% 数据 a,b 在 long long 范围内;
100% 数据 0<a,b≤10 
10086
 。
#include <iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<queue>
using namespace std;
const int N = 1e6 + 10;
int a[N], b[N], c[N];
int lena, lenb, lenc;
void gj(int a[], int b[], int c[]) {
    for (int i = 0; i < lena; i++) {
        c[i] += a[i] - b[i];
        if (c[i] < 0) {
            c[i + 1] -= 1;
            c[i] += 10;
        }
    }
}

int main() {
    string a1, b1;
    cin >> a1 >> b1;
    bool change = false;
    if (a1.size() < b1.size()) {
        swap(a1, b1);
        change = true;
    }
    if (!change){
        if (a1.size() == b1.size() && a1 < b1) {
            swap(a1, b1);
            change = true;
        }
    }
    lena = a1.size();
    lenb = b1.size();
    for (int i = 0; i < lena; i++) {
        a[lena - 1 - i] = a1[i] - '0';
    }
    for (int i = 0; i < lenb; i++) {
        b[lenb - 1 - i] = b1[i] - '0';
    }
    gj(a,b,c);
    while (lena > 1 && c[lena - 1] == 0) {
        lena--;
    }
    if (change) {
        cout << "-";
    }
    for (int i = lena - 1; i >= 0; i--) {
        
        cout << c[i];
    }
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务