【Acwing】 792. Resta de alta precisión

给定两个  正整数  ,计算它们的差,计算结果可能为负数。
输入格式

共两行,每行包含一个整数。
输出格式

共一行,包含所求的差。
数据范围

1≤整数长度≤105

输入样例:

32
11

输出样例:

21

Inserte la descripción de la imagen aquí

#include<iostream>
#include<string.h>
#include<vector>
using namespace std;

//判断是否有A>=B
bool cmp(vector<int> &A,vector<int> &B){
    
    
    //位数是否一样
    if(A.size()!=B.size()){
    
    
        return A.size()>B.size();
    }
    
    //位数不一样
    for(int i=A.size()-1;i>=0;i--){
    
    
        if(A[i]!=B[i]){
    
    
            return A[i]>B[i];
        }
    }
    
    //相等
    return true;
}

//C=A-B  满足A >= B, A >= 0, B >= 0
vector<int> sub(vector<int> &A,vector<int> &B){
    
    
    vector<int> C;
    int t=0;//借位
    for(int i=0;i<A.size();i++){
    
    
        t=A[i]-t;
        if(i<B.size()){
    
    
            t=t-B[i];
        } 
        C.push_back((t+10)%10);
        if(t<0){
    
    
            t=1;
        }else{
    
    
            t=0;
        }
    } 
    
    //去除前导0,如出现003的情况;
    while(C.size()>1 && C.back()==0){
    
     //size大于一是要考虑结果为0的时候
        C.pop_back();
    }
    
    return C;
}

int main(){
    
    
    string a,b;
    vector<int> A,B;
    
    cin>>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');
    }
    
    if(cmp(A,B)){
    
    
        auto C=sub(A,B);
        for(int i=C.size()-1;i>=0;i--){
    
    
            cout<<C[i];
        }
    }else{
    
    
        auto C=sub(B,A);
        cout<<"-";
        for(int i=C.size()-1;i>=0;i--){
    
    
            cout<<C[i];
            
        }
    }
    
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_43531919/article/details/115254146
Recomendado
Clasificación