高精度

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
string x,y;
int a[600];
int b[600];
struct G{
    int a[600],len;
    string s;
    bool b;//0 + 1 - 
}a1,a2,a3;

G  to_num(G k){
    k.len=k.s.length();
    for(int i=1;i<=k.len;i++){
        k.a[i]=k.s[k.len-i]-'0';
    }
    return k;
}

bool operator <(G a,G b){
     if(a.len==b.len)return a.a[a.len]<b.a[a.len];
     else return a.len<b.len;     
}

void swap(G &k1,G &k2){
    G k;
    k=k1;
    k1=k2;
    k2=k;
}


void out(G k){
    if(k.b)cout<<'-';
    for(int i=k.len;i>=1;i--){
        cout<<k.a[i];
    }    
    cout<<endl;      
}

G pl(G k1,G k2){
    G k3;   
    k3.len=max(k1.len,k2.len);  
    for(int i=1;i<=k3.len;i++){
        k3.a[i]+=k1.a[i]+k2.a[i];
        if(k3.a[i]/10){
            k3.a[i]%=10;
            k3.a[i+1]=1;
        }
    }
    if(k3.a[k3.len+1])k3.len++;
    return k3;
}
G sub(G k1,G k2){
    G k3;
    if(k1<k2){
        swap(k1,k2);
        k3.b=1;
    }
    k3.len=max(k1.len,k2.len);
    for(int i=1;i<=k3.len;i++){
        k3.a[i]+=k1.a[i]-k2.a[i];
        if(k3.a[i]<0){
            k3.a[i]+=10;
            k3.a[i+1]=-1;
        }
    }

    if(!k3.a[k3.len])k3.len--;  
    return k3;
}
G mul(G k1,G k2){

}
G div(G k1,G k2){

}


int main()
{
    cin>>a1.s>>a2.s;
    a1=to_num(a1);
    a2=to_num(a2);
    //a3=pl(a1,a2);
    a3=sub(a1,a2);
    out(a3);
    return 0;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章