0
点赞
收藏
分享

微信扫一扫

高精度减法

日月同辉9908 2022-02-16 阅读 83


#include<iostream>

#include<string>

using namespace std;


void re(string& x){

    string str;

    for(int i=0;i<x.length();i++){

        str+=x[x.length()-1-i];        

    }

    x=str;

}

string jianfa(string a,string b){//使用a-b且ab长度一样,同样已经被翻转

    int jiewei=0;

    string c;//存放结果

    for(int i=0;i<a.length();i++){

        int x=a[i]-'0';

        int y=b[i]-'0';

        int z=x-y-jiewei;

        if(z>=0){

            c+=(char)(z+'0');

            jiewei=0;

        }else{

            int liuz=((z%10)+10)%10;

            c+=(char)(liuz+'0');

            jiewei=(liuz-z)/10;

        }

    }

    re(c);

    while(c[0]=='0'){

        c=c.substr(1,c.length()-1);

    }

    return c;

}

string a;

string b;

int main(){

    cin>>a>>b;

    int max_length=a.length()>b.length()?a.length():b.length();

    re(a);

    re(b);

    for(int i=a.length();i<max_length;i++){

        a+='0';

    }

    for(int i=b.length();i<max_length;i++){

        b+='0';

    }

    bool flag=true;//为真代表a>b    

    string a1=a;re(a1);

    string b1=b;re(b1);

    flag=a1>b1;

    if(flag){

        cout<<jianfa(a,b);

    }else{

        cout<<"-"<<jianfa(b,a);

    }



    return 0;

}


举报

相关推荐

0 条评论