C++ BigInt模板手打
参考邝斌的模板
模拟整数,大整数对象的数据成员应该有两个
1:存放数字的数组,(常用字符类型存放1位数字,这里用int类型存放4位数字(当然也可以8位,不过参数需要用longlong才能保证乘法不超过int),相同长度的整数内存空间相同)
2:len 用以记录模拟数组的长度,方便运算和不输出前导0;
同事有两个静态常数据成员 static const int mod=10000 以及 static const int Dlen=4;
模拟大数运算是从低位往高位运算,所以在读取字符串存放在数组的时候要把高位的字符放在大数的低位数组上,运算时就能从0开始计算;输出的时候也从高位开始输出
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;struct BigInt
{const static int mod=10000;const static int Dlen=4;int a[600],len;BigInt(int v=0){memset(a,0,sizeof(a));len=0;do{a[len++]=v%mod;v/=mod;}while(v);}BigInt(char s[]){memset(a,0,sizeof(a));int L=strlen(s);len=(L-1)/Dlen+1;int index=0;for(int i=L-1;i>=0;i-=Dlen){int t=0;int k=i-Dlen+1;if(k<0) k=0;for(int j=k;j<=i;j++)t=t*10+s[j]-'0';a[index++]=t;}}BigInt operator +(const BigInt &rhs){BigInt ret;ret.len=max(len,rhs.len);for(int i=0;i<=ret.len;i++)ret.a[i] = 0;for(int i=0;i<ret.len;i++){ret.a[i]+=(i<len?a[i]:0)+(i<rhs.len?rhs.a[i]:0);ret.a[i+1]=ret.a[i]/mod;ret.a[i]%=mod;}if(ret.a[ret.len]>0) ret.len++;return ret;}BigInt operator *(const BigInt &rhs){BigInt ret;ret.len=len+rhs.len;for(int i=0;i<len;i++){int up=0;for(int j=0;j<rhs.len;j++){int tmp=a[i]*a[j]+a[i+j]+up;a[i+j]=tmp%mod;up=tmp/mod;}if(up!=0){a[i+rhs.len]=up;}}while(ret.a[ret.len-1]==0&&ret.len>1) ret.len--;return ret;}void print(){printf("%d",a[len-1]);for(int i=len-2;i>=0;--i){printf("%04d",a[i]);}printf("\n");}
};int main()
{char s1[200],s2[200];cin>>s1>>s2;BigInt a(s1),b(s2);a.print();b.print();(a+b).print();return 0;
}
转载于:https://www.cnblogs.com/alonglyn/p/9953959.html
C++ BigInt模板手打相关推荐
- (快速幂算法+高精度)洛谷P1045 麦森数
前言 故事的最后,让我们以一道十分经典的题目--<麦森数>来结尾.接受现实吧,总会有我们没准备过的高精度运算出现.我们固然可以提前把高精度的快速幂模板也准备好,但是总会有百密一疏的时候 ...
- 手打配对堆模板(支持push, pop, top, join)
常数较二叉堆小. 采用 new.delete 分配内存,不喜勿喷. 支持任意类型(需定义 operator< 或传入比较器)(需要默认构造函数) 如有错请指正!谢谢! template<t ...
- Java泛型之mybatis,基于spring MVC 和 MyBatis 泛型的代码生成模板
原标题:基于spring MVC 和 MyBatis 泛型的代码生成模板 简单说明 这块代码生成工具是我抽空的时候方便自己使用而编写的,并不适合其他框架,这里由于项目原有,我并没有上传泛型部份的代码, ...
- T4模板使用记录,生成Model、Service、Repository
自己目前在搭建一个.NET Core的框架,本来是打算使用前端做代码生成器直接生成到文件的,快做好了.感觉好像使用T4更方便一些,所以也就有了这篇文章~ 我还是有个问题没解决,就是我想生成每个类(接 ...
- 商品规格js_品优购电商系统开发 第3章 规格及模板管理
课程目标 目标1:理解和运用angularJS的service 目标2:理解和运用控制器继承 目标3:掌握代码生成器的使用 目标4:实现规格管理 目标5:实现模板管理 1.前端分层开发 1.1 需求分 ...
- kuangbin大数模板(加法和乘法)
之前的模板因为用了string类,以及运算的时候常数太大,导致速度太慢,虽然比较方便但不算很通用,所以存一波kuangbin大大的模板 /** 高精度,支持乘法和加法*/ struct BigInt ...
- Zabbix自带模板监控MySQL服务
Zabbix的服务端与客户端的安装这里不再赘述了,前面也有相应的文章介绍过了,感兴趣的伙伴们可以看看历史文章就可以了,今天主要介绍下如何利用zabbix自带的模板来监控MySQL服务的一些状态,同时通 ...
- 计算机考研数据结构算法模板
计算机考研数据结构算法模板 前言 临近考研,想给考研党们分享一些比较通用的算法模板,让复习更高效一点.如果备考时间足够长,备考人应该有大量时间刷大量习题,会有自己总结的算法模板,笔者文章参考了王道考研 ...
- Python脚本把支付宝和微信账单数据转换成随手记APP的excel标准模板导入
目录 实现初衷 下载账单流水 微信账单 支付宝账单 处理数据 账单文件命名及存放 执行Python脚本 随手记导入数据 查看账单 代码实现 实现初衷 每天通过手动记账太麻烦,而且要精细到每一项支付的内 ...
最新文章
- 【Python】函数图像绘制:二维图像、三维图像、散点图、心形图
- 深圳市中心迎来首批RoboTaxi,元戎启行正式开放运营
- linux shell ls 时间排序显示
- Access处理DISTINCT的Bug?
- 设置代码ios中根据文本设置label高度设置代码
- php5.3.3php5.4如何支持zend,PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法
- 架构师是大忽悠吗?阿里技术大牛告诉你真相!
- [css] 如何使用CSS实现段落首字母或首字放大效果?
- CVPR 2021 | 超越卷积的自注意力模型,谷歌、UC伯克利提出HaloNet
- 解决eclipse 文件更新不自动刷新的问题
- leetcode 241 python
- informix 数据库锁表分析和解决方法
- 区块链软件开发:区块链+餐饮
- 如何查看手机的android版本信息,怎么查看手机型号、配置、版本【图文教程】...
- 旋转矩阵中6保6_旋转矩阵公式中6保5
- @Resource注解
- [转载]Android学习网站
- 读博士需要什么品质和能力?到底什么样的人适合读博士?
- oracle 的lag,oracle分析函数lag
- 腾讯云大学大咖分享 | 深入浅出话智能语音识别