C++应用之自定义大整数类
写在前面:C语言在应用时有很多整数溢出的情形,如果运算结果很大,就需要用到所谓的高精度算法,即用数组来储存整数,并模拟手算的方法进行四则运算,这些算法并不难实现,但是考虑到易用性问题,即如果能像使用int一样方便地使用大整数,在这里我们采取struct来构造大整数类。
结构体BigInteger可用于储存高精度非负整数。
struct BigInteger{static const int BASE = 100000000;static const int WIDTH=8;vector<int> s;BigInteger(long long num=0){*this=num; //构造函数 }//下面是针对于整数赋值和字符串赋值两种不同的赋值方式。BigInteger operator = (long long num){s.clear();do{s.push_back(num%BASE);num/=BASE;}while(num>0);return *this;}BigInteger operator = (const string& str) //赋值运算符{s.clear();int x,len=(str.length()-1) / WIDTH +1;for(int i=0;i<len;i++){int end=str.length() - i*WIDTH;int start=max(0,end-WIDTH);scanf(str.substr(start,end-start).c_str(),"%d",&x);//将长字符串分为几段来保存,每段的长度由end-start来决定s.push_back(x);} return *this;}
};
其中,s用来保存大整数的各个数位。例如,若是要表示1234,第一种方式 x=1234,则s={4,3,2,1},若是第二种方式 x=“12345678912”,即字符串赋值,则s={45678912,123}。用vector而非数组保存数字我们不需要关心这个整数到底有多大,vector会自动根据情况申请和释放内存。
C++应用之自定义大整数类相关推荐
- ACM与Java -- 大整数类的常用函数一览表
BigInteger abs() 此方法返回一个BigInteger,其值是此BigInteger的绝对值. 2 BigInteger add(BigInteger val) 此方法返回一个BigI ...
- 关于大整数类加减法算法的一些思考
这几天做C++作业,有一道题要求实现大整数类,即不受内部数据类型表示范围限制的大数四则运算,比如123456789987654321987654321+987654321234567898765432 ...
- java大整数类减1,自己写Java大整数《1》表示和加减
自己写Java大整数<一>表示和加减 上周粗略计划自己写Java下的大整数运算. 后来仔细想想其实自己动手写大整数运算有1好2不好.2个不好分别是: 1,肯定没有Java内置的BigInt ...
- 定义一个大整数类,并重载乘法*运算符
1 struct bigint{ 2 int a[500]; //可表示1000位以内的整数 3 bigint& operator*(int & value){ 4 for(int i ...
- (大整数类Biginteger)大斐波数
题目 Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3. 计算第n项Fibonacci数值. 输入 输入第一行为一个整数N,接下来N行为 ...
- 一点一点解读紫书中例子--大整数类BigInteger (1)
首先贴上前一部分代码: struct BigInteger {static const int BASE = 100000000;static const int WIDTH = 8;vector&l ...
- 大整数类设计(C++)
简介 在平时的功能需求中,C/C++语言内置的整形变量表示范围已经足够大了,但是在一些特定的场合,例如解决数学问题的时候,可能需要表示极大的整数.这时候C/C++语言提供的类型就不能满足需求了,需要自 ...
- NTL密码算法开源库-大整数ZZ类(一)
2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(一) 本章综述 代码分析 贝祖公式 本章综述 大整数ZZ类主要实现了任意长度大整数表示.最大公因数.Jacobi符号和素性检验.笔者将通过 ...
- C++ 大整数运算 高精度除法
前言 这篇文章主要是对于大整数类的设计过程中,如何实现并改进长除法(模拟竖式法)的一个总结. 高精度除法的分类和比较 虽然有些文章在讨论大整数的除法运算时,喜欢分成高精度除以高精度和高精度除以低精度( ...
最新文章
- HDU4587(割点+最大连通分量)
- 程序员怎么面试求职?需要注意哪些因素?
- 阿里云服务器的安装以及使用
- 到底什么是IT服务管理
- 淘宝Hadoop现有测试框架探幽
- 话里话外:从信息系统两大特性理解信息化的实施难度
- ThreadLocal原理浅析
- LeetCode每周刷题(2019.7.1-2019.7.7)
- mysql数据库相关基础知识02
- 不玩游戏,何谈人生!
- Windows server 2003 下载
- 2019第十届蓝桥杯国赛c++B组真题
- 快讯分类_如何从Google快讯创建RSS Feed
- 数据库系统原理与应用教程(081)—— MySQL 视图(View)的创建与使用
- sqlite附加数据库操作实例
- android 读写文件 简书,Android 读取asset文件
- 域名绑定SSL阿里云免费证书
- nRF Connect SDK(NCS)-Windows开发环境搭建
- 一句平静而感人的英文电影对白
- 卷积神经网络 图像识别,卷积神经网络 图像处理
热门文章
- android点击号码打电话,android-拨打电话单击一个按钮
- C#学习笔记004——生成(创建)文本文件
- 用T5UIC1 4.3寸串口屏做动画
- 同一局域网下,手机能连上wifi,电脑连不上
- 怎么看计算机端口号,Win7怎么查看端口号?
- 数据治理(二):数据治理功能方面
- Gradle 7.4 包上传私服
- stable_sort应用例子
- 考研调剂 计算机科学 软件,四川大学计算机学院(软件学院)2020非全日制考研调剂信息...
- 【FAQ】Gerrit上打开的单子无法打开,点击提示“MissingobjectException:Missing unknown xxxx”