高精度模板(减法)

来源:互联网 发布:通达信手机炒股软件 编辑:程序博客网 时间:2024/05/21 23:34
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10010;
char a[maxn],b[maxn],c[maxn];
int x[maxn],y[maxn],z[maxn],t[maxn];  
int main(){
    scanf("%s%s",a,b);
    int l1=strlen(a),l2=strlen(b);
    //cout<<l1<<' '<<l2<<endl;
    for(int i=0;i<l1;i++) x[l1-i]=a[i]-'0';
    for(int i=0;i<l2;i++) y[l2-i]=b[i]-'0';
    int f=true;
    if(l1<l2) f=false;
    else if(l1>l2) f=true;
    else{
        for(int i=l1;i>=1;i--){
            if(x[i]>y[i]) break;
            if(x[i]<y[i]){
                f=false; break;
            }
        }
    }
    int l3=0;
    if(f) l3=l1;
    else{
        cout<<'-'; l3=l2;
        int l4=l2;  l2=l1;
        for(int i=1;i<=l1;i++)
            t[i]=x[i];
        for(int i=1;i<=l4;i++)
            x[i]=y[i];
        for(int i=1;i<=l1;i++)
            y[i]=t[i];
        for(int i=l1+1;i<=l4;i++)
            y[i]=0;
        l1=l4;
    }                  
    //cout<<l1<<' '<<l2<<endl;       
    //cout<<l3<<endl;
    for(int i=1;i<=l3;i++){
        z[i]+=x[i]-y[i];
        if(z[i]<0){
            z[i+1]--;
            z[i]+=10;
        }
    }
    //cout<<l3<<endl;
    while(l3>1&&z[l3]==0) --l3;
    //cout<<l3<<endl;
    for(int i=l3;i>=1;i--) cout<<z[i];  
    cout<<endl;
    return 0;
}