高精度模板求调(玄一关)
  • 板块灌水区
  • 楼主jqQt0220
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/20 13:36
  • 上次更新2024/8/20 15:51:59
查看原帖
高精度模板求调(玄一关)
678175
jqQt0220楼主2024/8/20 13:36
struct bigint
{
    vector<int> val;
    bigint()
    {
        this->val.clear();
    }
    bigint(int x)
    {
        (*this)=bigint();
        this->val.push_back(x);
        while(this->val.back()>=10)
        {
            int t=this->val.back()/10;
            this->val.back()%=10;
            this->val.push_back(t);
        }
    }
};
bigint operator+(bigint x,bigint y)
{
    bigint res;
    int lx=x.val.size(),ly=y.val.size(),len=max(lx,ly);
    for(int i=0;i<len;i++)
    {
        int t;
        if(i>=lx)
            t=y.val[i];
        else if(i>=ly)
            t=x.val[i];
        else
            t=x.val[i]+y.val[i];
        res.val.push_back(t);
    }
    for(int i=0;i<len;i++)
    {
        int t=res.val[i]/10;
        res.val[i]%=10;
        if(i+1>=len)
            res.val.push_back(t),len++;
        else
            res.val[i+1]+=t;
    }
    while(res.val.back()==0)
        res.val.pop_back();
    return res;
}
bigint operator*(bigint x,int y)
{
    bigint res;
    int len=x.val.size();
    for(int i=0;i<len;i++)
        res.val.push_back(x.val[i]*y);
    for(int i=0;i<len;i++)
    {
        int t=res.val[i]/10;
        res.val[i]%=10;
        if(i+1>=len)
            res.val.push_back(t),len++;
        else
            res.val[i+1]+=t;
    }
    while(res.val.back()==0)
        res.val.pop_back();
    return res;
}
istream &operator>>(istream &_is,bigint &_num)
{
    string tmp;
    _is>>tmp;
    int len=tmp.length();
    _num=bigint();
    for(int i=len-1;i>=0;i--)
        _num.val.push_back(tmp[i]-'0');
    return _is;
}
ostream &operator<<(ostream &_os,const bigint &_num)
{
    for(int i=_num.val.size()-1;i>=0;i--)
        _os<<_num.val[i];
    return _os;
}

+ 和 * 一算就卡死,能调好给一关。

2024/8/20 13:36
加载中...