自己想写个高精度模板,结果加法都错了
代码如下:
#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