首先贴上前一部分代码:

struct BigInteger {static const int BASE = 100000000;static const int WIDTH = 8;vector<int> s;BigInteger(long long num = 0) { *this = num; }BigInteger operator = (long long num) {s.clear();do {s.push_back(num % BASE);num /= BASE;} while(num > 0);return *this;}BigInteger operator = (const string &str) {s.clear();int x, len = (str.length() - 1) / WIDTH + 1;for(int i = 0; i < len; ++i) {int end = str.length();int start = max(0, end-WIDTH);sscanf(str.substr(start, end-start).c_str(), "%d", &x);s.push_back(x);}return *this;}
};

这里有几个问题:

  1. *this是什么?
    首先我们得知道 this 是一个指向该结构体的指针,所以 *this = num; 就是为了在使用struct声明变量时对变量进行初始化。
  2. BigInteger operator = (long long);
    个人认为此函数作用不大,因为形参是long long类型,所以一旦程序需要处理的数据大于long long的范围,这样一来此数据就无法准确的传入这个函数,这样一来就不能指望这个函数能给出正确的结果了。
  3. BigInteger operator = (const string);
    我认为这个函数才是最有用的,首先形参是以字符串的形式传入,这样我们就不用担心上面那种情况的出现了。接下来就是对字符串的处理,这里先介绍一下这几个函数:

    sscanf()函数:这里写一个例子,简单理解一下这个函数的作用。

    char s[20];
    sscanf("Helloworld", "%s", s);
    printf("%s", s);
    //输结果是Helloworld

    substr()函数:也写一个例子,简单理解一下:

    string str = "Helloworld";
    string str2 = str.substr(3, 3);
    //str2:low

    c_str()函数:可以看一下https://zhidao.baidu.com/question/104592558.html

现在步入正题:
首先不难看出作者的意图:通过vector<int> s 来分段保存大数据的值,每满8位数存一次,为什么是8位数呢?看了http://blog.csdn.net/mrcrack/article/details/53263235,我就知道对于两个8位数相加可能等于9位数,而int最多只能保存到2147483647,这样一来使用8位数一存就十分保险。

len 表示一共可以分为几个8位数,不足8为按8位计算。

接下来的有了上面那些函数就不难理解了。

一点一点解读紫书中例子--大整数类BigInteger (1)相关推荐

  1. (大整数类Biginteger)大斐波数

    题目 Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3. 计算第n项Fibonacci数值. 输入 输入第一行为一个整数N,接下来N行为 ...

  2. 在php中将5按位与运算,PHP 5.2和PHP 5.3中对大整数的按位运算(Bitwise operations on big integers in PHP 5.2 and PHP 5.3)...

    PHP 5.2和PHP 5.3中对大整数的按位运算(Bitwise operations on big integers in PHP 5.2 and PHP 5.3) 我将省略有关我是如何做到这一点 ...

  3. java 大整数编程_Java编程--RSA算法中的大整数运算

    Java编程–RSA算法中的大整数运算 RSA原理浅析 RSA是利用陷门单向函数实现的,其安全基础依赖于大整数的分解问题的难解性 算法过程 为了加深对RSA算法的了解,接下来通过简单的一个例子来分析一 ...

  4. 关于大整数类加减法算法的一些思考

    这几天做C++作业,有一道题要求实现大整数类,即不受内部数据类型表示范围限制的大数四则运算,比如123456789987654321987654321+987654321234567898765432 ...

  5. ACM与Java -- 大整数类的常用函数一览表

    BigInteger abs()  此方法返回一个BigInteger,其值是此BigInteger的绝对值. 2 BigInteger add(BigInteger val) 此方法返回一个BigI ...

  6. C++应用之自定义大整数类

    写在前面:C语言在应用时有很多整数溢出的情形,如果运算结果很大,就需要用到所谓的高精度算法,即用数组来储存整数,并模拟手算的方法进行四则运算,这些算法并不难实现,但是考虑到易用性问题,即如果能像使用i ...

  7. Java中过大整数储存问题(bushi

    当我们想定义一个变量来储存一个过大整数(这里举例用2147483648,是因为他已经大出int类型最大值2147483647) 故使用long定义变量,如下: public class 过大整数储存问 ...

  8. java大整数类减1,自己写Java大整数《1》表示和加减

    自己写Java大整数<一>表示和加减 上周粗略计划自己写Java下的大整数运算. 后来仔细想想其实自己动手写大整数运算有1好2不好.2个不好分别是: 1,肯定没有Java内置的BigInt ...

  9. 《Intel汇编语言程序设计》书中例子编译

    刚看到这例子是纠结了--编译不过啊,google后看到不少人便不过--后来经过一番查询,找到了编译方法 用masm615编译: 除了在例子里连接必要的lib文件外,就是设置masm615的环境变量了, ...

最新文章

  1. mybatis 一对多_Springboot整合Mybatis实现级联一对多CRUD操作
  2. 【android API】 ListView api 翻译
  3. MyBatis参数名称解析器-ParamNameResolver解析
  4. 20180517 迭代器
  5. MyBatis3源码解析(6)TypeHandler使用
  6. 盘点抖音及今日头条的优化推广方法有哪些?
  7. Ubuntu搜索不到WiFi的解决办法
  8. SSH学习2_ssh登陆卡住(expecting SSH2_MSG_KEX_ECDH_REPLY)
  9. AliSQL主从复制
  10. java excel转pdf linux_docker安装libreoffice并实现把Excel转为pdf
  11. android ibeacon距离,iBeacon使用蓝牙连接范围精确到1-3米
  12. java中ArrayList小案例(快敲20遍++)
  13. 长期宅在家的人都有什么比较好的室内锻炼的方法?
  14. JSF集成Spring
  15. 一份机器学习的自白书
  16. And and Pair
  17. layui复选框默认选中
  18. 浪潮IPBS9505S短接线刷固件(附教程)
  19. C++:char数组初始化
  20. 秋冬饮品研发没思路?带你看新品5大趋势!

热门文章

  1. winrar6.0汉化中文版 v6.00烈火版
  2. 奇虎360_2017校园招聘笔试编程题第一题
  3. Linux安装时分区跳过硬盘锁,安装Linux系统对硬盘分区时,必须有两种分区类型: 和 。...
  4. Matlab中Web的用法
  5. 怎么把照片压缩变小?如何改变图片的大小?
  6. 怎么安装计算机一级光盘,讲解光盘如何装系统
  7. 滨江学院c语言期中考试试题,南信大滨江学院linux期末作业.doc
  8. sql盲注 各种方法拿到 管理员账户和密码
  9. 土地生命周期管理-土地储备
  10. 从零开始创建一个Android主屏幕Widget