【紫书】BigInteger 高精度类型 原书上有一个bug:A+B!=B+A
存个代码
- struct BigInterger {
- static const int BASE = 1e8;
- static const int WIDTH = ;
- vector<int> s;
- BigInterger(long long num = ) { *this = num; }
- BigInterger operator =(long long num) {
- s.clear();
- do {
- s.push_back(num%BASE);
- num /= BASE;
- } while (num > );//num==0
- return *this;
- }
- BigInterger operator =(const string& str) {
- s.clear();
- int x, len = (str.length() - ) / WIDTH + ;//len==width
- for (int i = ; i < len; i++) {
- int end = str.length() - i*WIDTH;
- int start = max(, end - WIDTH);
- sscanf(str.substr(start, end - start).c_str(), "%d", &x);
- s.push_back(x);
- }
- return *this;
- }
- BigInterger operator +(const BigInterger& b)const {
- BigInterger c;
- c.s.clear();
- for (int i = , g = ;; i++) {
- if (g == && i >= max(s.size(), b.s.size()))break;//此处bug
- int x = g;
- if (i < s.size())x += s[i];
- if (i < b.s.size()) x += b.s[i];
- c.s.push_back(x%BASE);
- g = x / BASE;
- }
- return c;
- }
- BigInterger operator +=(const BigInterger& b) {
- *this = *this + b; return *this;
- }
- bool operator<(const BigInterger& b)const {
- if (s.size() != b.s.size()) return s.size() < b.s.size();
- for (int i = s.size() - ; i >= ; i--) {
- if (s[i] != b.s[i]) return s[i] < b.s[i];//Width 个数字一起比
- }
- return false;//==
- }
- bool operator>(const BigInterger &b)const { return b < *this; }
- bool operator<=(const BigInterger &b)const { return !(b < *this); }
- bool operator>=(const BigInterger &b)const { return !(*this < b); }
- bool operator!=(const BigInterger &b)const { return b < *this || *this<b; }
- bool operator==(const BigInterger &b)const { return!(b < *this) && !(*this<b); }
- };
- ostream& operator <<(ostream &out, const BigInterger& x) {
- out << x.s.back();
- for (int i = x.s.size() - ; i >= ; i--) {
- char buf[];
- sprintf(buf, "%08d", x.s[i]);
- for (int j = ; j < strlen(buf); j++)cout << buf[j];
- }
- return out;
- }
- istream&operator>>(istream &in, BigInterger&x) {
- string s;
- if (!(in >> s))return in;
- x = s;
- return in;
- }
【紫书】BigInteger 高精度类型 原书上有一个bug:A+B!=B+A的更多相关文章
- sqlite在Android上的一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow
更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ ::-/com.company.product W/System.er ...
- 关于mysql设置外键,实现参照性完整性约束,以及workbench上的一个bug(?)
一.本次数据库中有student,course,sc表,其设置情况 -- 创建course表 CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) D ...
- iOS UIPrintInteractionController在iPad的 iOS10 和 11上的奇怪bug
今天在弹出UIPrintInteractionController的时候,在ios10 和11的ipad 上测试,发现一直是protrait 方向弹出,结果就出现如下图的bug: 研究了好长时间,发现 ...
- 点石成金:访客至上的网页设计秘笈(原书第2版) 中文PDF版
可用性设计是Web设计中最重要也是难度最大的一项任务.本书作者根据多年从业的经验,剖析用户的心理,在用户使用的模式.为扫描进行设计.导航设计.主页布局.可用性测试等方面提出了许多独特的观点,并给出了大 ...
- 学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》
<Webbots.Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)> 译者序 前言 第一部分 基础概念和技术 第1章 本书主要内容3 1.1 发现互联网的真 ...
- PHP和MySQL Web开发(原书第4版) 高清PDF+源代码
PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区 作者:Linux [字体:大 中 小] 内容简介 <PHP和My ...
- ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation
ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...
- ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse
ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...
- ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL
ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. RGBD深度摄像头 ...
随机推荐
- 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 ...
- 使用 urllib 进行身份验证
如下图,有些网站需要使用用户名密码才可以登录,我们可以使用 HTTPBasicAuthHandler() 来实现 from urllib.request import HTTPPasswordMgrW ...
- FFMPEG转换WAV到MP3
下载FFMPEG https://ffmpeg.zeranoe.com/builds/ Example to encode VBR MP3 audio with ffmpeg using the li ...
- linux下c语言获取当前时间
和时间有关的函数定义在头文件”time.h”中 常用函数: time_t time(time_t *t); 函数说明:此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起 ...
- 转:ANDROID音频系统散记之四:4.0音频系统HAL初探
昨天(2011-11-15)发布了Android4.0的源码,今天download下来,开始挺进4.0时代.简单看了一下,发现音频系统方面与2.3的有较多地方不同,下面逐一描述. 一.代码模块位置 1 ...
- Android数据存储之SD卡
为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...
- Struts在Web.xml中的配置及Struts1和Struts2的区别
(1)配置Struts的ActionServlet <servlet>元素来声明ActionServlet <servlet-name>元素:用来定义Servle ...
- C#访问SQLServer数据库访问帮助类
SQLServer数据库访问帮助类 这里有一个Mysql帮助类的使用例子可以参考(大同小异) 写了一个Mysql的例子,SQLServer的差不多,一样的 C#简单三层结构设计UI.BLL.DAL 1 ...
- 让人一看就懂的excel相对引用和绝对引用案例解析
http://www.ittribalwo.com/article/2831.html 内容提要:本文的excel相对引用和绝对引用.混合引用的使用方法案例截选自<Excel效率手册 早做完,不 ...
- Mavan学习之pom聚合
所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...