今天看了《算法竞赛和入门基础》中的大整数类后,我自己也试着去实现一个大整数类,并且完成了整数的四则运算和逻辑运算功能。学习到了很多东西。在此分享一下。代码是C++的。用了C++中的STL模板类vector。
大整数类的数据存储结构如下所示:
static const int BASE=100000000;
static const int WIDTH=8;
std::vector<int> s;
下面我在书里原有的基础上继续编写了乘除和减法的代码。
class BigInteger
{
public:
//数据存储结构
static const int BASE=100000000;
static const int WIDTH=8;
std::vector<int> s;
//构造函数
BigInteger(long long num=0)
{
*this=num;
}
//long long型整数赋值方法
BigInteger operator = (long long num)
{
s.clear();
do{
s.push_back(num%BASE);
num/=BASE;
}while(num);
return *this;
}
//string类型赋值方法
BigInteger operator = (const std::string &str)
{
s.clear();
int x,len=(str.length()-1)/WIDTH+1;
for(int i=0;i<len;i++)
{
//从尾部开始切割
int end=str.length()-i*WIDTH;
int start=std::max(0,end-WIDTH);
//用sscnaf会去除前导零,下面输出的时候要注意,不过书里代码都已经给出了,这里我代为说明一下。
sscanf(str.substr(start,end-start).c_str(),"%d",&x);
s.push_back(x);
}
return *this;
}
//加法
BigInte