算法竞赛入门经典--大整数类
算法竞赛入门经典BigInteger的实现,其中有些地方还是不是很懂,先存着,看懂的网友可以帮忙标注下,然后交流学习下。
参考代码
struct BigInteger {static const int BASE = 100000000;//其数量级代表数组每个元素能够存的位数。数量级是几说明每个元素能存的位数就是几。如10:则只能存0-9;100:存0-99
// static const int BASE = 100;static const int WIDTH = 8; // 代表数组每个元素能够存的位数vector<int> s;BigInteger(long long num = 0) {*this = num; // 构造函数 用this指代大整数,对于指针来说永远是4字节。很方便。 }BigInteger operator = (long long num) { // 赋值运算符s.clear();//cout<<num<<endl;do {cout<<num % BASE<<endl;s.push_back(num % BASE);//老套路了,先求余,再把余舍去。进制转换也是这个原理(只不过最后是倒着输出) num /= BASE;cout<<num<<endl;} 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() - i*WIDTH;int start = max(0, end - WIDTH);sscanf(str.substr(start, end-start).c_str(), "%d", &x);s.push_back(x);}return *this;}BigInteger operator + (const BigInteger& b) const {//大佬写的很棒,但我不懂。 BigInteger c;c.s.clear();for(int i = 0, g = 0; ; i++) {if(g == 0 && i >= s.size() && i >= b.s.size()) break;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;}
};ostream& operator << (ostream &out, const BigInteger& x) {//重载 << out << x.s.back();//第一部分有可能不会占满,所以直接输出。 for(int i = x.s.size()-2; i >= 0; i--) {//逆序输出 数组 char buf[20];//用于存放数据 sprintf(buf, "%08d", x.s[i]);// 将 每个元素 放到 buf字符串中去,不足的左补0 for(int j = 0; j < strlen(buf); j++) out << buf[j];//输出即可 }return out;//方便链式书写。
}istream& operator >> (istream &in, BigInteger& x) {// 重载 >> string s;if(!(in >> s)) return in;//先把字符串读进 s x = s;// 把 s 赋值给 要赋的那个值。 x是那个值的引用哦。 return in;
}#include<set>
#include<map>
set<BigInteger> s;
map<BigInteger, int> m;int main() {BigInteger y;BigInteger x = y;BigInteger z = 123;BigInteger a, b;cin >> a >> b;cout << a + b << "\n";cout << BigInteger::BASE << "\n";//BigInteger b(10),a;
// a = b;
// BigInteger b;
// b ="1234567890456789123";//cout<<b;return 0;
}
算法竞赛入门经典--大整数类相关推荐
- 刘汝佳《算法竞赛入门经典》---总结
刘汝佳:<算法竞赛入门经典> 三步: 基本的数据结构+算法知识: 数论等数学基本知识: 锻炼联想建模能力.知识与实际相结合,解决实际问题! 第一章:程序设计入门 1.a/b 当a.b为整数 ...
- 算法竞赛入门经典(第二版)第三章习题
声明:作者水平有限,只是会基础C语言的小菜,C++还未入门.作者仅根据算法竞赛入门经典(第二版)书上第三章习题所述题意而编写,并未严格按照原题的输入输出编写,代码仅经过个人测试(OJ网站太慢了).代码 ...
- 《算法竞赛入门经典(第二版)》pdf
下载地址:网盘下载 内容简介 · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和 ...
- 【算法竞赛入门经典】读书笔记
前言 寒假期间准备一下练一下OJ,对于我这个小菜鸟来说,打稳基础很是关键.听说过[算法竞赛入门经典]的大名,加上自己学习的是 C++ ,而这本书用的是 C ,多学一门语言也是不错的.因此决定每天最少看 ...
- 刘汝佳《算法竞赛入门经典(第二版)》习题(二)
刘汝佳<算法竞赛入门经典(第二版)>第二章习题 目录 刘汝佳<算法竞赛入门经典(第二版)>第二章习题 习题2-1 水仙花数 习题2-2 韩信点兵 习题2-3 倒三角形 习题2- ...
- 算法竞赛入门经典(第二版)-刘汝佳-第六章 数据结构基础 习题(12/14)
文章目录 说明 习题 习6-1 UVA 673 平衡的括号 习6-2 UVA 712 S - 树 习6-3 UVA 536 二叉树重建 习6-4 UVA 439 骑士的移动 习6-5 UVA 1600 ...
- 《算法竞赛入门经典(第2版)》
<算法竞赛入门经典(第2版)> 基本信息 作者: 刘汝佳 丛书名: 算法艺术与信息学竞赛 出版社:清华大学出版社 ISBN:9787302356288 上架时间:2014-6-5 出版日期 ...
- 《算法竞赛入门经典》Chap3
<算法竞赛入门经典(第二版)>第三章 思考题 题目1 必要的存储量 题目2 统计字符1的个数 示例程序 程序3-1 逆序输出 程序3-2 开灯问题 程序3-3 蛇形填数 程序3-4 竖式问 ...
- [读书笔记]《算法竞赛入门经典》第1章
书名:算法竞赛-入门经典 第2版 作者:刘汝佳 类别:读书笔记 文章目录 前言 第1章 程序设计入门 1.1 算术表达式 1.2 变量及其输入 1.3 顺序结构程序设计(Sequential Prog ...
- 刘汝佳《算法竞赛入门经典(第二版)》习题(三)
刘汝佳<算法竞赛入门经典(第二版)>第三章习题(一) 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 给出一个由O和X组成的串(长度为1~80),统计得分.每个 ...
最新文章
- ORA-01855: AM/A.M. or PM/P.M. required错误解决
- 简单的html5,简单的HTML5初步入门教程
- ios 应用 开发流程。。。
- 获取另一个驱动的设备结构体_《rt-thread驱动框架分析》-i2c驱动
- 应该怎么做一个登录功能?
- ListView下拉刷新、上拉载入更多之封装改进
- boost any 实现万能容器_全面剖析 C++ Boost 智能指针!| CSDN 博文精选
- 有一天我突然接到他的电话
- Linux支持运行3dmax,Mesa的Panfrost Gallium3D驱动程序现在可以使用新的DRM驱动程序
- android深度探索第二章
- 真正的数字化,是CEO决策的底层逻辑要变了
- 红孩儿编辑器的输入法模块的函数依赖关系图
- 《AutoCAD 2014中文版超级学习手册》——第2章 图层设置 2.1 设置图层
- Go技术日报(2021-11-16/17)——gRPC的错误处理实践
- 都是was缓存惹的祸
- Java的基础语法(二)
- 黑马点评关键业务流程梳理一
- Appender的几种实现方式
- ubuntu下命令行禁用笔记本触摸板
- 蓝桥杯python组——猜生日