C++ 大整数类(支持上亿个位的整数 '+'、'-'、'*'、'/'、'%'、'^' 计算实现)
设计这个类的初衷,来自一次面试,第一个加数是1后面接一千个0,第二个加数是2后面接一千个0,描述这两个数相加的过程,而 int 类型的范围是-2147483648~2147483647,只能接9个0,unsigned long long int 类型也只能保存最大 18446744073709551615,1后面接19个0,远远无法满足需求,于是需要设计一个类来保存大整数的每一位。
LagerData类,包含两个成员变量,bool类型变量保存整数的正负号,char*类型变量指向一个字符串,字符串中保存每一位数字。
此类运用了大量C++的基础语法,无参构造、数值构造,数字字符串构造、拷贝构造、各种操作符重载、友元函数重载、使 string 类型变量可以像 stringstream 类型一样级联式输出,将数据级联式输出到 LagerData 类中
LagerData类的头文件声明如下:
class LagerData
{
private:
bool m_sign;
char* m_point;
public:
// 默认构造函数
LagerData(int num = 0, size_t length = 0);
// 字符串形式构造
LagerData(char const* pNum, size_t len);
// 拷贝构造函数
LagerData(LagerData const& that);
// 析构函数
virtual ~LagerData();
// 非负数判断,非负数返回true,负数返回false
bool nonnegative() const;
// 负数判断,负数返回true,非负数返回false
bool negative() const;
// 返回该数据的长度(从数字首位开始计数,首位是0也会计数)
size_t size() const;
// 第一位有效数字(不为0的数)的索引号
size_t const firstvalid() const;
// 有效数字的个数
size_t const validnum() const;
// 将数字规格化,将数字前面的0去除,不是常对象的返回自身引用
LagerData& regularization();
// 将数字规格化,将数字前面的0去除,常对象的返回一个规格化后的常对象
LagerData const regularization() const;
// 打印每一位数字信息
void print();
// 方括号重载,返回下表位置的数值,不是常对象的返回该位置引用,可修改
char& operator[](int index);
// 方括号重载,返回下表位置的数值,常对象的返回常量字符,不可修改数据对象本身
char const operator[](int index) const;
// ==号操作符重载,判断两个大数据是否相等
bool operator==(LagerData const& that) const;
// !=号操作符重载,判断两个大数据是否不相等
bool operator!=