实现超大整数的方法

本文探讨了实现超大整数的方法,包括字符串表示法、10进制表示法(如BCD编码)、10^n进制表示法以及2进制/16进制表示法。作者选择了65536进制,利用unsigned short int数组存储,以提高运算效率。大数的四则运算将基于这种数据结构实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天做的产品测试,发现内置最大的整数值只有10的9次方,没有实现超大整数的功能。现在海量计算和海量存储应用越来越多,而且已经有很多人实现了超大整数的存储和运算,调查了一些这方面的方法,根本上都是自定义一个多字节的数据结构,以便对程序语言的内置int型做扩展。自定义结构的方式尽管人人不同,但是本质上,都是选取某一种数学进制表示超大数,同时用链表或者数组的方式组织成大数的进制的位元。比如我们习惯的10进制,表示12345这个数时,其本质含义是

 

1×10^4+2×10^3+3×10^2+4×10^1+5×10^0

这里,10即使进制,10的n次方表示该位权为n,而权左边的系数就是位元,计算机中的16进制也是同样的道理。因此任意一个10进制数Ps,在进制S中,其位元为Ai,则可以用公式表示为:

 

Ps=A0S^0+A1S^1+A2S^2+...+An-1S^(n-1)

 

大数的实现原理就是设定一个进制S,然后使用链表或者数组,从表头开始每一个元素表示S进制从低位到高位(或者相反)的各个权的位元。这就是大数的存储方式。大数的各种,最基本的是四则运算,本质上也是我们小学学的方法,由低向高,相同权的位元对应着逐个计算。因此,仅从数据结构上考虑,大数的各种计算性能差异就取决与进制的选择了。

 

通过调查,前人大数实现的方法主要有:

1、字符串表示法:即一个大数比如12345,就用字符串"12345”方式存储,这是10进制的,优点是表示简单易于理解,但计算时总需要做字符到数字的映射,效率低且浪费空间。

2、10进制表示法,包括BCD编码表示,计算机上每个字节有16个存储状态,该方法只用其中0x00-0x09这10个状态,用1个或者半个字节表0-9,这样最接近人的理解,且计算也不麻烦,效率上,在32位机中,每次运算需要把位元从一个或者半个字节转成int型。并且显而易见,存储时有浪费。

3、10^n进制表示法,即用一个或几个字节表示从0-10^n的数,这样做的目的是提高效率并且节省空间,因为有时10进制大数可能是数百万位的,节省空间很必要。如果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值