「模板」高精度
时间:2019-10-26
本文章向大家介绍「模板」高精度,主要包括「模板」高精度使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
高精度模板:
颓了个很好的高精板子(但没有高精乘低精,以后再补)。
struct Big{ int len,s[810]; Big(){memset(s,0,sizeof(s)); len=1;} Big(int val) {*this=val;} Big(const char *val) {*this=val;} Big operator = (const int &val){ R char s[810]; sprintf(s,"%d",val); *this=s;return *this; } Big operator = (const char *val){ len=strlen(val); while(len>1&&val[0]=='0') ++val,len--; for(R int i=0;i<len;++i) s[i]=val[len-i-1]-'0'; return *this; } inline void deal(){ while(len>1&&!s[len-1]) len--; } Big operator + (const Big &a) const { Big res; res.len=0; R int top=max(len,a.len),add=0; for(R int i=0;add||i<top;++i){ R int now=add; if(i<len) now+=s[i]; if(i<a.len) now+=a.s[i]; res.s[res.len++]=now%10; add=now/10; } return res; } Big operator - (const Big &a) const { Big res; res.len=0;R int del=0; for(R int i=0;i<len;++i){ R int now=s[i]-del; if(i<a.len) now-=a.s[i]; if(now>=0) del=0; else del=1,now+=10; res.s[res.len++]=now; } res.deal(); return res; } Big operator * (const Big &a) const { Big res; res.len=len+a.len; for(R int i=0;i<len;++i) for(R int j=0;j<a.len;++j) res.s[i+j]+=s[i]*a.s[j]; for(R int i=0;i<res.len;++i) res.s[i+1]+=res.s[i]/10,res.s[i]%=10; res.deal(); return res; } Big operator / (const Big &a) const { Big res,cur=0;res.len=len; for(R int i=len-1;~i;--i){ cur=cur*10,cur.s[0]=s[i]; while(cur>=a) cur-=a,res.s[i]++; } res.deal(); return res; } Big operator % (const Big &a) const { Big res=*this/a; return *this-res*a; } Big operator += (const Big &a) {*this=*this+a; return *this;} Big operator -= (const Big &a) {*this=*this-a; return *this;} Big operator *= (const Big &a) {*this=*this*a; return *this;} Big operator /= (const Big &a) {*this=*this/a; return *this;} Big operator %= (const Big &a) {*this=*this%a; return *this;} bool operator < (const Big &a) const { if(len!=a.len) return len<a.len; for(R int i=len-1;~i;i--) if(s[i]!=a.s[i]) return s[i]<a.s[i]; return false; } bool operator > (const Big &a) const {return a<*this;} bool operator <= (const Big &a) const {return !(*this>a);} bool operator >= (const Big &a) const {return !(*this<a);} bool operator == (const Big &a) const {return !(*this>a||*this<a);} bool operator != (const Big &a) const {return *this>a||*this<a;} inline void print(){ for(R int i=a.len-1;~i;--i) printf("%d",a.s[i]); puts(""); } };
原文地址:https://www.cnblogs.com/toot-wjh/p/11743228.html
- 微信版12306来了!用12306微信小程序买票靠谱吗
- 无需写try/catch,也能正常处理异常
- “人工智能毁灭人类”是一种末世恐惧传染病
- 有状态(Stateful)应用的容器化
- 实现一些字符串操作标准库函数、解决一些字符串问题
- 外卖陷阱,你入坑了么?
- ASP.NET Core的配置(4):多样性的配置来源[上篇]
- 37 个你必须知道的现代数据中心术语
- Python读书笔记7
- 2017年人工智能在游戏领域打败人类,未来我们将何去何从?
- 3杂再破市场行情 6位数结拍
- 将永久存储添加到Red Hat CDK Kit 3.0
- ASP.NET MVC的Razor引擎:RazorView
- 三分钟学会 Java 单元测试
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python五十八课——正则表达式(替换)
- 配置Tomcat使用https协议(单向认证)
- python五十八课——正则表达式(切割)
- python五十九课——正则表达式的拓展内容
- 配置SVN的hooks功能自动更新代码
- python六十课——高阶函数之map
- python六十一课——高阶函数之reduce
- python六十二课——高阶函数之filter
- Nginx优化配置详解
- python六十三课——高阶函数之sorted
- python六十四课——高阶函数练习题(一)
- python六十四课——高阶函数练习题(二)
- python六十四课——高阶函数练习题(三)
- Jenkins+Maven+Svn实现代码自动打包与发布
- python六十五课——单元测试(一)