巨大数的输入输出及其简单计算

本文介绍了巨大数的概念、万进制的基础,以及微易码补码的引入原因。详细阐述了如何使用微易码补码进行加、减法的实现,并通过实例分析了计算过程,但作者承认因数学能力限制,未能提供正式的数学证明。
摘要由CSDN通过智能技术生成

一、巨大数的基本概念

巨大数的基本概念:位数趋近于无限的数字。

二、巨大数的由来在这里插入代码片

当前计算机对于数据的处理在一般情况下,只能处理一些固定类型并且固定长度的数据。例如,在对于c语言提供了许多整数类型,int类型(范围:-2147483648~2147483647),float类型(可表示的数据范围是 -3.4E+38 和 3.4E+38)和double类型(可表示的数据范围-1.7E-308~1.7E+308),但是float的有效位数只有7位,double类型的有效位数也只有15位,处理数据不够精确。要处理的数据的位数越多,丢失的信息量也越大。因此我们提供一种对位数超出表示范围的数据的处理工具——也就是这个巨大数的处理工具。  

三、万进制基本概念

万进制的原理同二进制十进制是一样的,二进制是逢二进一,同理万进制就是逢万进一。
1,首先用字符串(char hugeNum[ ])存储巨大数。
2,用atoi函数将字符串转化为整形(int类型)的数组,并且按照四个一组的方式存储到整形数组中。这就需要记录数字的长度,而且还需要考虑符号位的问题。
由此我们可以的出计算巨大数所需要的基本数据 :
1. int sign		巨大数的符号
2. int *huge	巨大数的数据
3. int count	巨大数的数据位数

即:

typedef struct HUGE_NUMBER {
	int sign; /* 取值为 0 或 1 ,其中0 代表正号, 1代表负号(符号域)*/
	int *huge; /* 巨大数的整数部分(数据域)*/
	int count;/* 数据的位数(十进制情况下)*/
}

四、为什么是万进制而不是十万进制

因为我们决定用整形数组的方式存储巨大数,为了方便而使用int类型。之所以使用万进制,而不用更高的进制位,是因为在涉及乘法的计算中依然要是数据保持在int类型可以表示的范围之内(例:若使用十万进制,当出现99999×99999 = 9999800001,但是很明显9999800001已经超出了int类型的表示范围,因此一万进制是最合适的进位)。

五、微易码补码的概念

获得微易码补码的具体操作与求补码相似,除符号位外,对于整数,其微易码补码与原码相同,对于负数,其微易码补码为9999-源码(huge[ i ])。
例如:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值