C语言中多位数的输入问题研究
2016-04-12马红旭
马红旭
【摘要】 C语言中的scanf( )函数输入数据位数,最多可达到15—19位十进制数,本文将讨论扩大scanf( )函数输入数据位数的方法。
【关键词】 C语言 scanf( )函数 扩大输入数据位数
在使用C语言中的scanf( )函数时,常遇到输入数据位数受限制的情况。这里调试工具选用cfree4.0/vc6.0,在输入十进制数时,如果输入变量是int16类型,可输入的数据范围在[-32768,+32767]之间,最多5位整数,变量是long / int32类型,输入数据范围在[-2G,+2G]之间,约±2×109之间,最多10位整数,变量是float类型,尽管输入数据范围在±3.4×1038之间,但由于精确度是7位有效数字限制,最多输入7位数是准确的,变量是double/long double类型,最多输入15--19位数是准确的,再想多输入几位,直接的scanf( )函数就做不到了。本文将探索研究扩大scanf( )输入位数的方法。
一、扩大scanf( )输入位数的思路
既然用scanf( )输入数值型数据达不到要求 ,我们就考虑把输入的数据作为字符串,先把输入的长串数据处理成字符串形式,每一位数以字符形式保存到一个字符型数组中,这样输入数据的宽度理论上就不受限制,只要用户设定的字符数组足够大即可。以二进制转十进制数为例,首先要输入一个N位二进制数,由于目前我们使用的计算机字长一般都在32位以上,所以每个机器数二进制数位数都不少于32位,本程序数组大小设置为128,意味着可以完成约128位二进制数的输入和转换问题。从形式上,输入位数增加了不少。
二、字符型数据转换成数值型数据原理
用上述方法输入的长数据串,我们可以把它当做任何进制数,这里我们把问……
