存个代码

  1. struct BigInterger {
  2. static const int BASE = 1e8;
  3. static const int WIDTH = ;
  4. vector<int> s;
  5. BigInterger(long long num = ) { *this = num; }
  6. BigInterger operator =(long long num) {
  7. s.clear();
  8. do {
  9. s.push_back(num%BASE);
  10. num /= BASE;
  11. } while (num > );//num==0
  12. return *this;
  13. }
  14. BigInterger operator =(const string& str) {
  15. s.clear();
  16. int x, len = (str.length() - ) / WIDTH + ;//len==width
  17. for (int i = ; i < len; i++) {
  18. int end = str.length() - i*WIDTH;
  19. int start = max(, end - WIDTH);
  20. sscanf(str.substr(start, end - start).c_str(), "%d", &x);
  21. s.push_back(x);
  22. }
  23. return *this;
  24. }
  25.  
  26. BigInterger operator +(const BigInterger& b)const {
  27. BigInterger c;
  28. c.s.clear();
  29. for (int i = , g = ;; i++) {
  30. if (g == && i >= max(s.size(), b.s.size()))break;//此处bug
  31. int x = g;
  32. if (i < s.size())x += s[i];
  33. if (i < b.s.size()) x += b.s[i];
  34. c.s.push_back(x%BASE);
  35. g = x / BASE;
  36. }
  37. return c;
  38. }
  39. BigInterger operator +=(const BigInterger& b) {
  40. *this = *this + b; return *this;
  41. }
  42.  
  43. bool operator<(const BigInterger& b)const {
  44. if (s.size() != b.s.size()) return s.size() < b.s.size();
  45. for (int i = s.size() - ; i >= ; i--) {
  46. if (s[i] != b.s[i]) return s[i] < b.s[i];//Width 个数字一起比
  47. }
  48. return false;//==
  49. }
  50. bool operator>(const BigInterger &b)const { return b < *this; }
  51. bool operator<=(const BigInterger &b)const { return !(b < *this); }
  52. bool operator>=(const BigInterger &b)const { return !(*this < b); }
  53. bool operator!=(const BigInterger &b)const { return b < *this || *this<b; }
  54. bool operator==(const BigInterger &b)const { return!(b < *this) && !(*this<b); }
  55. };
  56. ostream& operator <<(ostream &out, const BigInterger& x) {
  57. out << x.s.back();
  58. for (int i = x.s.size() - ; i >= ; i--) {
  59. char buf[];
  60. sprintf(buf, "%08d", x.s[i]);
  61. for (int j = ; j < strlen(buf); j++)cout << buf[j];
  62. }
  63. return out;
  64. }
  65. istream&operator>>(istream &in, BigInterger&x) {
  66. string s;
  67. if (!(in >> s))return in;
  68. x = s;
  69. return in;
  70. }
  1.  

【紫书】BigInteger 高精度类型 原书上有一个bug:A+B!=B+A的更多相关文章

  1. sqlite在Android上的一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow

    更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ ::-/com.company.product W/System.er ...

  2. 关于mysql设置外键,实现参照性完整性约束,以及workbench上的一个bug(?)

    一.本次数据库中有student,course,sc表,其设置情况 -- 创建course表 CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) D ...

  3. iOS UIPrintInteractionController在iPad的 iOS10 和 11上的奇怪bug

    今天在弹出UIPrintInteractionController的时候,在ios10 和11的ipad 上测试,发现一直是protrait 方向弹出,结果就出现如下图的bug: 研究了好长时间,发现 ...

  4. 点石成金:访客至上的网页设计秘笈(原书第2版) 中文PDF版

    可用性设计是Web设计中最重要也是难度最大的一项任务.本书作者根据多年从业的经验,剖析用户的心理,在用户使用的模式.为扫描进行设计.导航设计.主页布局.可用性测试等方面提出了许多独特的观点,并给出了大 ...

  5. 学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》

    <Webbots.Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)> 译者序 前言 第一部分 基础概念和技术 第1章 本书主要内容3 1.1 发现互联网的真 ...

  6. PHP和MySQL Web开发(原书第4版) 高清PDF+源代码

    PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区  作者:Linux [字体:大 中 小]     内容简介 <PHP和My ...

  7. ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation

    ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...

  8. ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse

    ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...

  9. ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL

    ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. RGBD深度摄像头 ...

随机推荐

  1. LeetCode_Maximum Subarray | Maximum Product Subarray

    Maximum Subarray 一.题目描写叙述 就是求一个数组的最大子序列 二.思路及代码 首先我们想到暴力破解 public class Solution { public int maxSub ...

  2. 8 -- 深入使用Spring -- 4... Spring的AOP

    8.4 Spring的AOP AOP(Aspect Orient Programming),也就是面向切面编程,最为面向对象编程的一种补充. AOP和OOP互为补充,面向对象编程将程序分解成各个层次的 ...

  3. [AX]AX2012 R2 HR Jobs, Positions, Department和Workers

    部门.作业(Job的官方翻译)和位置(Position的官方翻译)是AX人力资源管理的基本组织元素,Job和Position在AX有的地方又称作工作和职位,其实这个翻译更为恰当. Job定义的是一个工 ...

  4. PostgreSQL恢复误删数据

    在Oracle中:删除表或者误删表记录:有个闪回特性,不需要停机操作,可以完美找回记录.当然也有一些其他的恢复工具:例如odu工具,gdul工具.都可以找回数据.而PostgreSQL目前没有闪回特性 ...

  5. Splash autoload() 方法

    autoload() 方法可以设置每个页面访问时自动加载的对象,比如自动加载 JavaScript 代码,自动加载 Ajax 代码等等 注意此方法只负责加载 JavaScript/Ajax 代码,不执 ...

  6. VS无法导航到插入点F12失败

    关闭VS 开启控制台并导航到Visual安装文件夹,例如C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\ID ...

  7. Kafka Java API操作topic

    Kafka官方提供了两个脚本来管理topic,包括topic的增删改查.其中kafka-topics.sh负责topic的创建与删除:kafka-configs.sh脚本负责topic的修改和查询,但 ...

  8. js当中null和{}区别

    {}是一个不完全空的对象,因为他的原型链上还有Object呢,而null就是完全空的对象,啥也没有,原型链也没有,所以null instanceof Object === false;[]就更不用说了 ...

  9. LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

    解决方法 属性=>配置属性=>输入=>忽略特定库LIBCMT

  10. linux apache下虚拟主机配置方法

    假设VPS的IP是58.130.17.168,有两个域名指向该IP,分别是domain1.com, domain2.com, 修改/etc/httpd/conf/httpd.conf,在文件的最后加入 ...