本算法目前属于还处于测试状态,欢迎Hack!


struct gj{bool fu; //是否是负数int tt,mod; //高精的长度int s[40005]; //压位用的数组inline gj(){ //整体初始化fu=0; tt=0; mod=1e9;memset(s,0,sizeof(s));}inline gj read(){  register char ch; //高精度读入while(!isdigit(ch=getchar()))if(ch=='-')fu=1;char _[100005]; rg l=0,r=-1; _[0]=ch;while(isdigit(_[++l]=getchar()));; tt=l/9-!(l%9);for(rg i=(l-1)%9+1;i;--i) (s[tt]*=10)+=_[++r]^48;for(rg i=tt-1;i>=0;--i)for(rg j=0;j<9;++j)(s[i]*=10)+=(_[++r]^48);while(tt&&!s[tt])--tt;; return (*this);}inline void print(){ //高精度输出if(fu)putchar('-');printf("%d",s[tt]);for(rg i=tt-1;i>=0;--i)printf("%09d",s[i]);putchar('\n');}inline bool operator >(const gj &x){ //定义大于if(tt!=x.tt)return tt>x.tt;for(rg i=tt;i>=0;--i)if(s[i]!=x.s[i])return s[i]>x.s[i];return 0;}inline bool operator <(const gj &x){ //定义小于if(tt!=x.tt)return tt<x.tt;for(rg i=tt;i>=0;--i)if(s[i]!=x.s[i])return s[i]<x.s[i];return 0;}inline gj operator =(int x){ //int的等于while(tt)s[tt]=0,--tt;s[0]=x%mod; s[1]=x/mod;if(s[1])tt=1;; return *this;}inline gj operator =(ll x){ //ll的等于while(tt)s[tt]=0,--tt;while(x)s[tt]=x%mod,x/=mod,++tt;if(!s[tt])--tt;; return *this;}inline void add(const gj &x){ //加法的底层rg sign=0; if(x.tt>tt)tt=x.tt;for(rg i=0;i<=tt;++i){s[i]+=x.s[i]+sign; sign=0;if(s[i]>mod)s[i]-=mod,sign=1;}if(sign)s[++tt]=1;}inline void cut(const gj &x){ //减法的底层if(fu)cout<<54564<<endl;rg sign=0; for(rg i=0;i<=tt;++i){s[i]-=x.s[i]+sign; sign=0;if(s[i]<0)s[i]+=mod,sign=1;}while(tt&&!s[tt])--tt;if(!tt&&!s[tt]) fu=0;}inline void mul(const gj &x){ //乘法的底层gj y; ll num; y.tt=tt+x.tt;for(rg i=0;i<=tt;++i){ num=0;for(rg j=0;j<=x.tt;++j){num=(ll)s[i]*x.s[j]+y.s[j+i]+num;y.s[j+i]=num%mod; num/=mod;} if(num)y.s[x.tt+i+1]=num;}if(num)++y.tt;; *this=y;}inline void operator +=(gj x){ //赋值加法重载if(fu==x.fu){(*this).add(x); return;}if(*this>x) (*this).cut(x);else x.cut(*this),*this=x,fu^=1;}inline gj operator +(const gj &x){ //加法正常重载gj y=*this; y+=x; return y;}inline void operator -=(gj x){ //赋值减法重载if(fu!=x.fu){(*this).add(x); return;}if(*this>x){(*this).cut(x); return;}x.cut(*this); *this=x; if(s[tt])fu^=1;}inline gj operator -(const gj &x){ //减法正常重载gj y=*this; y-=x; return y;}inline void operator *=(gj x){ //赋值乘法重载if(!s[tt]||!x.s[x.tt]){gj y; *this=y;}if(fu!=x.fu)fu=1;else fu=0;; (*this).mul(x);}inline gj operator *(const gj &x){ //乘法正常重载gj y=*this; y*=x; return y;}inline gj operator *(int x){  gj y; y=x; return (*this)*y;}inline void operator *=(int x){gj y; y=x; (*this)*=y;}inline gj operator +(int x){  gj y; y=x; return (*this)+y;}inline void operator +=(int x){gj y; y=x; (*this)+=y;}inline gj operator -(int x){  gj y; y=x; return (*this)-y;}inline void operator -=(int x){gj y; y=x; (*this)-=y;}
};

转载于:https://www.cnblogs.com/812-xiao-wen/p/10901972.html

高精度(压位+判负数+加减乘+读写)相关推荐

  1. 火车进出栈问题(高精度+压位+质因数分解消除除法)

    题目描述 一列火车n节车厢,依次编号为1,2,3,-,n. 每节车厢有两种运动方式,进栈与出栈,问n节车厢出栈的可能排列方式有多少种. 输入格式 输入一个整数n,代表火车的车厢数. 输出格式 输出一个 ...

  2. 32位处理器中,通过汇编指令实现64位数据的加减运算

    32位处理器一次可以处理的数据是32bit,但如果是64bit的数据,依然可以运算,只是不能一步到位.下面以加法为例.         目录 1.基本思路 2.具体实现 (1) 将数据保存到寄存器 ( ...

  3. 按键控制两位数码管加减

    关于按键方法的原帖地址:http://www.amobbs.com/thread-4308630-1-1.html //本文按键未经消抖处理,有了好方法再来上传. #include "reg ...

  4. 卡特兰数(高精度乘法压位)

    889. 满足条件的01序列 题目 提交记录 讨论 题解 视频讲解 给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 ...

  5. 原码/补码的加减运算and溢出判断

    小数点的处理: 任意一个二进制数S都可以表示为 研究小数点就要研究阶码E的取值: 若E=0,则表示纯小数--代表定点小数: 例0.1111表示+0.1111,1.1111表示-0.1111. 若E=n ...

  6. 计算机组成加减交替法被除数,2019考研408计算机组成原理知识:定点数的表示和运算...

    2019考研408计算机组成原理知识:定点数的表示和运算 2018-01-12 17:05 | 考研集训营 2019考研计算机如何来复习呢?文都考研集训营建议参加2019考研计算机的考生可以开始看专业 ...

  7. 整数加减运算的二进制表示

    两位整数的加减都可看做 一个数加上另一个数,首先我们要把数据的二进制表示转化成补码,因为在计算机内部,数据的加减是按补码进行运算的. A补+B补=(A+B)补(mod 2^n+1) 连同符号位相加,符 ...

  8. 加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结

    在学习计算机组成原理的计算方法时,或为步骤疑惑,或为题目难倒,本文主要介绍思路以及对常用类型小结 个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版<计算机组成原理> ...

  9. 基于FPGA的两位按键控制LED数码管加减计数实验

    两位按键控制LED数码管加减计数实验 这是一篇拖了一个多月的文章,主要是基于FPGA利用按键消抖原理与动态数码管驱动原理相结合,来实现一个利用两位按键来控制数码管实现0-99的加法计数或者减法计数功能 ...

最新文章

  1. 【STM32】输入捕获实验代码详解
  2. 游戏中汉字显示的实现与技巧
  3. Python中的numpy.sum()
  4. Windows7下IIS7.5的伪静态URL Rewrite安装配置和案例综合
  5. 安装SQL Server 2016
  6. 关于DNF的多媒体包NPK文件的那些事儿(5)- IMG文件里的指向型索引项(指向帧)的深度与有向环检测
  7. vue项目通讯录_vue组件--通讯录
  8. 《穿越计算机的迷雾》读书笔记
  9. eclipse html插件的下载和安装
  10. 2018年深圳杯论文_2018年深圳杯数学建模挑战赛通知及题目
  11. 我的iPhone桌面
  12. nodejs 定时任务
  13. 祝所有的考生考试顺利!!!
  14. 马云的妻子曝光,背景十分惊人!没有她就没有今天的阿里巴巴.....
  15. ASEMI快恢复二极管SFP3006和瞬态二极管一样吗?SFP3006和TVS能否代换
  16. 野人与传教士过河问题
  17. 狂神Docker笔记之:Docker的常用命令
  18. The requested resource (Servlet action is not available) is not available.这个问题让我通宵了一个晚上
  19. UnicodeEncodeError: 'ascii' codec can't encode character u'\u548c' in position 0: ordinal not in ran
  20. python导入自定义模块报attributeerror_Python脚本报错AttributeError: ‘module’ src has no attribute’xxx’解决方法...

热门文章

  1. wemosD1_WIFI模块 与 arduino
  2. 全国计算机等级考试题库二级C操作题100套(第67套)
  3. 判断图有无环_浅谈什么是图拓扑排序
  4. 类加载器子系统的作用
  5. wincc 报警记录 mysql_如何才能把WINCC报警记录中的数据通过SQL取上来-工业支持中心-西门子中国...
  6. 这是我见过最好的Flash知识介绍了!
  7. APP技巧:电脑登录微信,要删除这5个文件!否则别人能查看聊天记录
  8. 操作系统:分享10个经常用的cmd命令
  9. Android高版本开机广播,android3.1以上,假如程序没有启动过,怎么获取开机广播呢?...
  10. 原生JDBC操作数据库流程