存个代码

  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. vmware 安装 Mac OS X 10.9 Mavericks

    This guide shows how to install fresh OS X 10.9 Mavericks on VMware workstation with Windows 7 or Wi ...

  2. 使用 urllib 进行身份验证

    如下图,有些网站需要使用用户名密码才可以登录,我们可以使用 HTTPBasicAuthHandler() 来实现 from urllib.request import HTTPPasswordMgrW ...

  3. FFMPEG转换WAV到MP3

    下载FFMPEG https://ffmpeg.zeranoe.com/builds/ Example to encode VBR MP3 audio with ffmpeg using the li ...

  4. linux下c语言获取当前时间

    和时间有关的函数定义在头文件”time.h”中 常用函数: time_t time(time_t *t); 函数说明:此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起 ...

  5. 转:ANDROID音频系统散记之四:4.0音频系统HAL初探

    昨天(2011-11-15)发布了Android4.0的源码,今天download下来,开始挺进4.0时代.简单看了一下,发现音频系统方面与2.3的有较多地方不同,下面逐一描述. 一.代码模块位置 1 ...

  6. Android数据存储之SD卡

    为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...

  7. Struts在Web.xml中的配置及Struts1和Struts2的区别

    (1)配置Struts的ActionServlet     <servlet>元素来声明ActionServlet    <servlet-name>元素:用来定义Servle ...

  8. C#访问SQLServer数据库访问帮助类

    SQLServer数据库访问帮助类 这里有一个Mysql帮助类的使用例子可以参考(大同小异) 写了一个Mysql的例子,SQLServer的差不多,一样的 C#简单三层结构设计UI.BLL.DAL 1 ...

  9. 让人一看就懂的excel相对引用和绝对引用案例解析

    http://www.ittribalwo.com/article/2831.html 内容提要:本文的excel相对引用和绝对引用.混合引用的使用方法案例截选自<Excel效率手册 早做完,不 ...

  10. Mavan学习之pom聚合

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...