C++ 大整数类(支持上亿个位的整数 '+'、'-'、'*'、'/'、'%'、'^' 计算实现)

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!=
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值