高精度(从简版)
来源:互联网 发布:iphone文件传输软件 编辑:程序博客网 时间:2024/04/30 17:45
前言
高精度想必大家再熟悉不过了,这里我就不再赘述它的原理(模拟),但大部分同学的高精度用得都太零散了,蒟蒻我就将常用的运算符号用struct封装一下,请大佬们笑纳。
code:
struct Big{ int num[N],len; Big (){ memset(num,0,sizeof(num)); len=1; } void Rd(){ scanf("%s",A); int sl=strlen(A); len=0; for(int i=sl-1,x;x=0,i>=0;num[len++]=x,i-=4){ if(i>=3)REP(j,i-3,i)x=(x<<1)+(x<<3)+(A[j]^48); else REP(j,0,i)x=(x<<1)+(x<<3)+(A[j]^48); } } void Pr(){ if(!num[len-1]){printf("0");return;} printf("%d",num[len-1]); DREP(i,len-2,0)printf("%04d",num[i]); } Big operator+(const Big &a)const{ Big b; b.len=max(len,a.len); REP(i,0,b.len-1){ int &B=b.num[i]; B+=num[i]+a.num[i]; if(B>=P)B-=P,b.num[i+1]++; } if(b.num[b.len])b.len++; return b; } Big operator+(int a){ Big b; b.len=len; REP(i,0,len-1){ int &B=b.num[i]; B+=num[i]+a%P; if(B>=P)b.num[i+1]++,B-=P; a/=P; } if(b.num[b.len])b.len++; return b; } Big operator-(const Big &a)const{ Big b; b.len=len; REP(i,0,len-1)b.num[i]=num[i]; REP(i,0,len-1){ b.num[i]-=a.num[i]; int now=i; while(b.num[now]<0)b.num[now]+=P,now++,b.num[now]--; } while(!b.num[b.len-1])b.len--; return b; } Big operator-(int a){ Big b; b.len=len; REP(i,0,len-1)b.num[i]=num[i]; REP(i,0,len-1){ b.num[i]-=a%P; int now=i; while(b.num[now]<0)b.num[now]+=P,now++,b.num[now]--; a/=P; } while(!b.num[b.len-1])b.len--; return b; } Big operator*(const Big &a)const{ Big b; b.len=len+a.len-1; REP(i,0,len-1) REP(j,0,a.len-1){ int &B=b.num[i+j]; B+=num[i]*a.num[j]; if(B>=P)b.num[i+j+1]+=B/P,B%=P; } while(b.num[b.len])b.len++; return b; } Big operator*(const int &a)const{ Big b; REP(i,0,len-1){ int &B=b.num[i]; B+=num[i]*a; if(B>=P)b.num[i+1]+=B/P,B%=P; } if(b.num[b.len])b.len++; return b; } Big operator/(const int &a)const{ Big b; REP(i,0,len-1)b.num[i]=num[i]; DREP(i,len-1,1)b.num[i-1]+=b.num[i]%a*P,b.num[i]/=a; b.num[0]/=a; b.len=len; while(b.len>1 && !b.num[b.len-1])b.len--; return b; }};
小结:
高精度的用处还是很大的吧…
阅读全文
0 0
- 高精度(从简版)
- 高精度加减法(改良版)
- 高精度阶乘(递归版)
- 高精度除法(高精度除以高精度)
- 编程从简(天梯贪心2)
- Flume快速入门(二):设计从简
- noip1998 高精度计算 (高精度)
- 高精度总结(高精度类和重载运算高精度阶乘)
- JMS入门(一)从简单示例开始
- 从简单实例开始,学会写Makefile(一)
- 从简单实例开始,学会写Makefile(二)
- iOS 面试大全从简单到复杂(简单篇)
- iOS 面试大全从简单到复杂(1)
- iOS 面试大全从简单到复杂(简单篇)
- C#开发的进化史(从简单的数据类型开始)
- Shiro介绍(二):从简单的认证开始
- Unity3D 学习从简单开始-GUI探索(一)
- Unity3D 学习从简单开始-GUILayout探索(二)
- 大数阶乘
- hello
- 对数据的异常处理
- TensorFlow实现Lenet-5
- Android SpannableString的工具类
- 高精度(从简版)
- 一些卡常技巧
- html/css实现居中的几个常用方法
- spring设置隔离事务属性
- JZOJ5458. 【NOIP2017提高A组冲刺11.7】质数
- Deepdive学习小记(第一节:简介)
- 库文件
- 输入/输出学生信息
- MySQL 学习教程(九)【整理】-外键