大整数乘法问题.docVIP

  • 5
  • 0
  • 约1.19万字
  • 约 12页
  • 2016-09-20 发布于河南
  • 举报
大整数乘法问题

2.4 大整数乘法问题 算法设计思想: (1) 大整数的存储 我们知道,在编译系统中,整型数据类型的最大存储空间为8字节,也就是最大能存储232的数据。即使使用双精度浮点数据类型(double),也只能存储最大1.798×10308的数据。如果需要计算10200数量级的整数的乘法,利用的现有的数据类型就无法实现了。所以,为了实现大整数的乘法,需要自己定义一种数据类型,以及对应的基本运算。 在该算法中,为了调试和处理方便,我们采用静态整型数组来存放大整数,即用数组的每一个元素存放大整数一位上的数字。然后,分别定义用数组存放的大整数的加法、减法和移位运算。这样,我们就可以用定义的大整数进行后面分治乘法的运算。 (2) 分治思想 将位数是2的次幂的n位的十进制大整数X和Y各分为2段,每段的长为n/2位。则有,X=A×10n/2+B ,Y=C×10n/2+D。这样,乘积问题变为这样的分治问题: XY=(A×10n/2+B)(C×10n/2+D)=AC×10n+(AD+CB)×10n/2+BD ① 如果按①式计算XY,我们可得时间复杂度T(n)=O(n2)(详细论证在课本上)。显然,用①式来计算X和Y的乘积并不比乘法竖式更有效。为了改进算法的计算复杂性,我们把XY写成另一种形式: XY=AC×10n+[(A-B)(D-C)+AC+BD]×10n/2+BD??

文档评论(0)

1亿VIP精品文档

相关文档