C++手搓大整数类

char是8位的,short是16位的,int是32位的,最大的long long是64位的,也就是说基本的数据类型无法表示超过2的64次方-1的数

如今又到了找工作的时候了,面试手撕题少不了,听说这个手搓大整数也有过面试题,这里先搓一手,免得以后执手相看泪眼

其实Java有这个大整数类,手搓大整数类可以说是一个比较综合的应用,需要使用到重载运算符,包括输入输出、四则运算等等,还需要字符串的运算,其中比较运算符的实现是十分巧妙的,这里的思维应用、逻辑运算都是很好的训练,这里只实现了大整数相加的功能,源码已开源在MaolinYe/BigInteger: 使用C++11实现的一个大整数类 (github.com)

欢迎大家指正修改 

目录

基本思路 

重载赋值运算符 

重载输入输出运算符 

重载加运算符

重载比较运算符


基本思路 

实现大整数有两种方法,一种是将大数当成字符来处理,手动计算加减乘除,另一种则是将大数分成多个小部分用基本类型存储处理

我们这里实现第二种方法的,目前版本是支持非负整数

基本思路是将一个大整数切分成几段小的用int存储,用vector容器来存储每段,例如

1111222233334444 integer[1]=11112222 integer[0]=33334444

重载赋值运算符 

重载赋值运算符,实现从基本数据类型到大整数的转换,通过和base取余切分出段

class BigInteger {
    static const int width = 8; // 切分段的长度
    static const int base = 1e8; // 切分段的数量级
    vector<int> integer; // 存储各个段
    int segments = 0; // 切分的段数
    BigInteger operator=(long long num) { // 重载赋值运算符,从基本数据类型转换大整数存储
        integer.clear();
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员萌芽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值