C语言中超大整数乘法运算
摘要:C语言中超大整数乘法运算在计算机中,长整型(longint)变量的范围是-48至47,因此若用长整型变量做乘法运算,乘积最多不能超过10位数。即便用双精度型(double)变量,也仅能保证16位有效数字的精度。在某些需要更高精度的乘法运算的场合,需要用别的办法来实现乘法运算。比较容易想到的是做多位数乘法时列竖式进行计算的方法,只要写出模拟这一过程的程序,就能实现任意大整数的乘法运算。经过查阅资料,找到一种更易于编程的方法,即“列表法”。下面先介绍“列表法”:例如当计算8765x234时,把乘数与被乘数照如下列出,见表1:把表1中的数按图示斜线分组(横纵坐标和相等的数分为一组),把每组数的累加起来所得的和记在表格下方,见表2:从最低位的20开始,保留个位数字“0”,把个位以外的数“2”进到前一位;把次低位的39加上低位进上来的2得41,保留个位数字“1”,把“4”进到前一位;以此类推,直至最高位的16,16加上低位进上来的4得20,保留“0”,把2进到最高位,得乘积答数2051010。根据以上思路就可以编写C程序了,再经分析可得:1、一个m位的整数与一个n位的整数相乘,乘积为m+n-1位或m+n位。2、程序中,用三个字符数组分别存储乘数、被乘数与乘积。由第1点分析知,存放乘积的字符数组的长度应不小于存放乘数与被乘数的两个数组的长度之和。3、可以把第二步“计算填表”与第三四步“累加进位”放在一起完成,可以节省存储表格2所需的空间。4、程序关键部分是两层循环,内层循环累计一组数的和,外层循环处理保留的数字与进位。编写的程序如下:#defineMAXLENGT
温馨提示:当前文档最多只能预览
5 页,若文档总页数超出了
5 页,请下载原文档以浏览全部内容。
本文档由 匿名用户 于 2020-11-04 10:41:56上传分享