博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ BigInt模板手打
阅读量:5965 次
发布时间:2019-06-19

本文共 1744 字,大约阅读时间需要 5 分钟。

参考邝斌的模板

模拟整数,大整数对象的数据成员应该有两个

1:存放数字的数组,(常用字符类型存放1位数字,这里用int类型存放4位数字(当然也可以8位,不过参数需要用longlong才能保证乘法不超过int),相同长度的整数内存空间相同)

2:len 用以记录模拟数组的长度,方便运算和不输出前导0;

同事有两个静态常数据成员 static const int mod=10000   以及   static const int Dlen=4;

模拟大数运算是从低位往高位运算,所以在读取字符串存放在数组的时候要把高位的字符放在大数的低位数组上,运算时就能从0开始计算;输出的时候也从高位开始输出

#include 
#include
#include
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
0) ret.len++; return ret; } BigInt operator *(const BigInt &rhs) { BigInt ret; ret.len=len+rhs.len; for(int i=0;i
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

你可能感兴趣的文章
切图崽的自我修养-[ES6] 编程风格规范
查看>>
服务器迁移小记
查看>>
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
Java B2B2C多用户商城 springcloud架构- common-service 项目构建过程(七)
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
linux安全问答(1)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
查看>>
Server-01 How to Find the Remote Desktop Port
查看>>
Java--接口、抽象与继承
查看>>
通过IP判断登录地址
查看>>
Oracle闪回技术
查看>>
CentOS 7 配置yum本地base源和阿里云epel源
查看>>