高精度求助
  • 板块灌水区
  • 楼主cygnus_beta
  • 当前回复8
  • 已保存回复8
  • 发布时间2021/5/23 13:23
  • 上次更新2023/11/4 22:50:08
查看原帖
高精度求助
452531
cygnus_beta楼主2021/5/23 13:23

自己想写个高精度模板,结果加法都错了

代码如下:

#ifndef PRECISION_HPP
#define PRECISION_HPP

#include<iostream>
#include<string>

namespace cyg{
    class precision{
    private:
        std::string number;

        void carry(std::string& num,std::string::iterator iter){
            if(*iter-'0'>9){
                if(iter!=num.begin())*(iter-1)+=*iter-'0'-9,*iter-=10;
                else *iter-=10,num.insert(0,std::string(1,'0'+(*iter-'0')/10+1)),iter=num.begin()+1;
            }
            if(iter!=num.begin())carry(num,iter-1);
        }
    public:
        precision():number("0"){}

        precision(const std::string& init){number=init;}

        precision& operator+(precision& b){
            if(b.number.size()<=this->number.size()){
                std::string::iterator num_iter=this->number.end()-1;
                for(std::string::iterator iter=b.number.end()-1;iter!=b.number.begin()-1;iter--,num_iter--){
                    *num_iter+=*iter-'0';
                    carry(this->number,num_iter);
                }
                return *this;
            }
            else{
                precision bb=b;
                std::string::iterator num_iter=bb.number.end()-1;
                for(std::string::iterator iter=this->number.end()-1;iter!=this->number.begin()-1;iter--,num_iter--){
                    *num_iter+=*iter-'0';
                    carry(bb.number,num_iter);
                }
                this->number=bb.number;
                return *this;
            }
        }

        friend std::istream& operator>>(std::istream& in,precision& b);

        friend std::ostream& operator<<(std::ostream& out,const precision& b);
    };

    std::istream& operator>>(std::istream& in,precision& b){
        in>>b.number;
        return in;
    }

    std::ostream& operator<<(std::ostream& out,const precision& b){
        out<<b.number;
        return out;
    }
}

#endif

2021/5/23 13:23
加载中...