C++大数模版-面向对象实现

文章目录

借鉴了一下比较规范的大数运算C++库,写了一套面向对象的大数运算库。存在的一点不足是下面的代码最低运行环境是C++11,如果不是的话,std::to_string()这个函数需要自己实现,再有函数式运算的办法还是比较麻烦,重载运算符会好一点。下面是加法的版本:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>

class Bignumber{
public:
explicit Bignumber(std::string number);
Bignumber add(Bignumber other){
std::string result;
int diflen = this->string_var.length() - other.string_var.length();
if(diflen>0){
for(int j=0;j<diflen;j++)
other.string_var.insert(0, "0");
} else{
for(int j=diflen;j<0;j++)
this->string_var.insert(0, "0");
}
int carry=0;
for(int i=this->string_var.length()-1; i>=0; –i){
int sum = this->string_var[i] + other.string_var[i] + carry - &#039;0&#039; -&#039;0&#039;;
carry=0;
if (sum <= 9 || i == 0) {
result.insert(0, std::to_string(sum));
}
else {
result.insert(0, std::to_string(sum % 10));
carry = 1;
}
}
if(carry){result.insert(0,"1");}
return Bignumber(result);
}
std::string getstr(){
return this->string_var;
}
private:
std::string string_var;
};
Bignumber::Bignumber(std::string number)
{
this->string_var = number;
}
int main(){
std::cout<<Bignumber(std::to_string(21)).getstr()<<std::endl;
Bignumber a1 = Bignumber("8888888");
Bignumber b1 = Bignumber("132222222");
std::cout<<a1.add(b1).getstr();
return 0;
}

本文作者:MyTech::Author

本文链接: https://mytech.pages.dev/2021/02/02/echo_218/