大整数类-高精度模板
来源:互联网 发布:淘宝淘口令有危险吗 编辑:程序博客网 时间:2024/06/05 19:42
在大部分oier看来,只要有高精度的题就是毒瘤题(雾),之前的我遇到高精度的题就直接弃疗了,但是如果考试考到,这些分就白丢了,所以说抽出时间整理了一下高精度模板,主要包括:高精加,高精减,高精乘,高精除单精
先说说如何定义:
struct bigint{ int s[10100]; int len; bool zf; bigint() { memset(s,0,sizeof(s)); len=0; zf=0; } void init() { len=strlen(ch); if (ch[1]=='-') { zf=1; for (int i=2;i<=len;i++) s[i]=ch[len-i]-'0'; } else { for (int i=1;i<=len;i++) s[i]=ch[len-i]-'0'; } } void reverse() { int t[10010]; for (int i=1;i<=len;i++) t[i]=s[len-i+1]; for (int i=1;i<=len;i++) s[i]=t[i]; } void uni() { while (s[len]==0&&len>1)len--; } void pr() { for (int i=len;i>=1;i--) printf("%d",s[i]); }};
init是反着存数,uni是去掉前导零,reverse是翻转,pr是输出答案,为什么要翻转呢?因为除了除法其他操作都是从低到高,为了方便直观理解,我们可以再除法操作之前先reverse再除再reverse(其实是懒得处理下标问题)
加法:
bigint operator +(bigint x,bigint y){ bigint nw; nw.len=max(x.len,y.len); for (int i=1;i<=nw.len;i++) { nw.s[i]+=x.s[i]+y.s[i]; nw.s[i+1]+=nw.s[i]/10; nw.s[i]%=10; } if (nw.s[nw.len+1]>0) nw.len++; return nw;}
减法:
bool operator >(bigint x,bigint y){ if (x.len>y.len) return 1; else if (x.len<y.len) return 0; int nw=x.len; while (nw) { if (x.s[nw]>y.s[nw]) return 1; else if (x.s[nw]<y.s[nw]) return 0; nw--; } if (nw==0) return 1; return 1; }bigint operator -(bigint x,bigint y){ bigint nw; nw.len=max(x.len,y.len); for (int i=1;i<=nw.len;i++) { nw.s[i]+=x.s[i]-y.s[i]; if (nw.s[i]<0) nw.s[i+1]--,nw.s[i]+=10; } while (nw.s[nw.len]==0&&nw.len>1)nw.len--; return nw;}
这里有个技巧:(这里只写了a,b都是正数的比较函数)
if (a>b) { a=a-b; } else a=b-a,printf("-"); a.pr();
这样可以避免减出负数
乘法:
bigint operator *(bigint x,bigint y){ bigint nw; nw.len=x.len+y.len; for (int i=1;i<=x.len;i++) for (int j=1;j<=y.len;j++) { nw.s[i+j-1]+=x.s[i]*y.s[j]; nw.s[i+j]+=nw.s[i+j-1]/10; nw.s[i+j-1]%=10; } while (nw.s[nw.len]==0&&nw.len>1)nw.len--; return nw;}
高精除单精:
bigint operator /(bigint x,int y){ bigint sh; int nv=0; for (int i=1;i<=x.len;i++) { nv=nv*10+x.s[i]; sh.s[++sh.len]=nv/y; nv=nv%y; } return sh;}
这种东西只要细心相信大家都可以写出来,这里的模板只是供大家参考,最好是自己写一下
阅读全文
0 0
- 大整数类-高精度模板
- 高精度大整数模板
- 模板--高精度、大整数幂取模
- C++高精度大整数模板
- JAVA模板 大整数模板 高精度
- 高精度大整数类
- 【高精度】大整数类
- 高精度 大整数 计算 模板优化方向
- BigInteger大整数类高精度
- 大整数类 模板
- 大整数类BIGN的设计与实现 C++高精度模板
- 大整数类BIGN的设计与实现 C++高精度模板
- 大整数类BIGN的设计与实现 C++高精度模板
- 大整数类BIGN的设计与实现 C++高精度模板
- 高精度大整数模板(n!为例)
- 高精度整数模板
- 高精度整数模板(转)
- 高精度 大整数加法
- 基于jquery的web组件实现方式
- 温固而知新——从基础开始
- Ubuntu 相关命令
- Robot Framework (1):配置开发环境
- Machine Learning 4
- 大整数类-高精度模板
- vim分屏功能总结
- 一行代码解决QQ互联避免跨域报错
- 单词翻转
- 数值统计
- java排序之 --- 快速排序
- ThinkPHP3.2设置404跳转页面
- tomcat配置Https
- 逆流而上读书笔记1