【紫书】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深度摄像头 ...
随机推荐
- LeetCode_Maximum Subarray | Maximum Product Subarray
Maximum Subarray 一.题目描写叙述 就是求一个数组的最大子序列 二.思路及代码 首先我们想到暴力破解 public class Solution { public int maxSub ...
- 8 -- 深入使用Spring -- 4... Spring的AOP
8.4 Spring的AOP AOP(Aspect Orient Programming),也就是面向切面编程,最为面向对象编程的一种补充. AOP和OOP互为补充,面向对象编程将程序分解成各个层次的 ...
- [AX]AX2012 R2 HR Jobs, Positions, Department和Workers
部门.作业(Job的官方翻译)和位置(Position的官方翻译)是AX人力资源管理的基本组织元素,Job和Position在AX有的地方又称作工作和职位,其实这个翻译更为恰当. Job定义的是一个工 ...
- PostgreSQL恢复误删数据
在Oracle中:删除表或者误删表记录:有个闪回特性,不需要停机操作,可以完美找回记录.当然也有一些其他的恢复工具:例如odu工具,gdul工具.都可以找回数据.而PostgreSQL目前没有闪回特性 ...
- Splash autoload() 方法
autoload() 方法可以设置每个页面访问时自动加载的对象,比如自动加载 JavaScript 代码,自动加载 Ajax 代码等等 注意此方法只负责加载 JavaScript/Ajax 代码,不执 ...
- VS无法导航到插入点F12失败
关闭VS 开启控制台并导航到Visual安装文件夹,例如C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\ID ...
- Kafka Java API操作topic
Kafka官方提供了两个脚本来管理topic,包括topic的增删改查.其中kafka-topics.sh负责topic的创建与删除:kafka-configs.sh脚本负责topic的修改和查询,但 ...
- js当中null和{}区别
{}是一个不完全空的对象,因为他的原型链上还有Object呢,而null就是完全空的对象,啥也没有,原型链也没有,所以null instanceof Object === false;[]就更不用说了 ...
- LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
解决方法 属性=>配置属性=>输入=>忽略特定库LIBCMT
- linux apache下虚拟主机配置方法
假设VPS的IP是58.130.17.168,有两个域名指向该IP,分别是domain1.com, domain2.com, 修改/etc/httpd/conf/httpd.conf,在文件的最后加入 ...