重载运算符

#include<iostream>
#include<string.h>
#include<stdio.h>

using namespace std;

const int MAXN=4000;

struct Bignum{
    int len,s[MAXN];
    string condition;
    inline int max(int a,int b){
        return a>b?a:b;
    }
    inline void swap(Bignum &a,Bignum &b)
    {
        Bignum t=a;
        a=b;
        b=t;
    }
    inline void BignumGet(string &s,Bignum *a,char *ch){
        bool flag=true;
        int k=0,k2=0;;
        int record[1001]={0};
        for (auto i:s)
        {
            if (!(s[i]>='0'&&s[i]<=9)){
                ch[k]=s[i];
                k++;
                record[k2]=i;
            }
        }
        for (int i=1;i<=k2;i++)
        {

        }
    }
    Bignum()
    {
        len=1;
        memset(s,0,sizeof(s));
    }
    Bignum(const char *num){*this=num;}
    Bignum(int num){*this=num;}
    Bignum operator=(const char *num)
    {
        len=strlen(num);
        for (int i=0;i<len;i++)
        {
            s[i]=num[len-i-1]-'0';
        }
        return *this;
    }
    Bignum operator=(const string s1)
    {
        condition=s1;
        return *this;
    }
    Bignum operator=(const int num)//存储 
    {
        char a[MAXN];
        sprintf(a,"%d",num);
        *this=a;
        return *this;
    }
    Bignum operator+(const Bignum &a)//重载加法 
    {
        Bignum c;
        c.len=max(len,a.len)+1;
        for (int i=0,x=0;i<c.len;++i)
        {
            c.s[i]=a.s[i]+s[i]+x;
            x=c.s[i]/10;
            c.s[i]%=10;
        }
        if (c.s[c.len-1]==0)--c.len;
        return c;
    }
    Bignum operator+=(const Bignum &a)
    {
        return *this+a;
    }
    Bignum operator-(Bignum &num){//重载减法 
        Bignum b=*this;
        Bignum a=num;
        bool flag=false;
        if (b<a){
            swap(b,a);
            flag=true;
            cout<<'-';
        }
        b.len=max(a.len,b.len);
        for (int i=0,x=0;i<b.len;i++){
            if (b.s[i]<a.s[i]){
                b.s[i]=b.s[i]+10-a.s[i];
               b.s[i+1]--;
            }else {
                b.s[i]=b.s[i]-a.s[i];
            }
        }
        while (b.s[b.len-1]==0)b.len--;
        return b;
    }
    Bignum operator*(const Bignum &a)//重载高精度乘法 
    {
        Bignum c;
        c.len=len+a.len;
        for (int i=0;i<len;i++)
        {
          for (int j=0;j<a.len;j++)
            {
                c.s[i+j]+=a.s[j]*s[i];
                c.s[i+j+1]+=c.s[i+j]/10;
                c.s[i+j]%=10;

            }   
        }
        while(c.s[c.len-1]==0)c.len--;
        return c;
    }
    Bignum operator*(const int a)//乘法 
    {
        Bignum c=a;
        return *this*c;
    }
    Bignum operator*=(const Bignum &a)
    {
        *this=*this*a;
        return *this;
    }
    bool operator <(const Bignum&x)const{//重载<号 
        if (len!=x.len) return len<x.len;
        for (int i=len-1;i>=0;i--)
        {
            if (s[i]!=x.s[i])return s[i]<x.s[i];
        }
        return false;
    }
    bool operator >(const Bignum&x)const{return x<*this;}//重载>号 
    bool operator <=(const Bignum&x)const{return !(x<*this);}//重载<=号 
    bool operator >=(const Bignum&x)const{return !(*this<x);}//重载>=号 
    bool operator ==(const Bignum&x)const{return !(x<*this||x>*this);}//重载==号 
    bool operator !=(const Bignum&x)const{return (x<*this||x>*this);}//重载!=号 

};
ostream &operator<<(ostream &out,const Bignum&x){//输出流 
    if (x.condition.empty()){
        cout<<x.condition;
        string a;
        return out;
    }
    for (int i=x.len-1;i>=0;i--)
      cout<<x.s[i];
    return out;
}
istream &operator>>(istream &in,Bignum&x){//输入流 
    char num[MAXN];
    in>>num;
    x=num;
    return in;
}


int main()
{
    Bignum a,b;
    cin>>a;
    cout<<a*99;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值