c语言数组数据乘法,用C语言的乘法函数的方法来计算数组的积

匿名用户

1级

2017-11-18 回答

大数乘法基本上是乘法竖式笔算的代码化。

基本功能有3个

1. 大数的数组表示。

2. 大数乘以小数,得到大数。

3. 大数加大数,得到大数。

对于1,其实就是int数组的每个元素存储若干位。比如每个元素保存4个十进制位。[0]存储个十百千,[1]存储万、十万、百万、千万,诸如此类。一个数组保存一个大数。因此需要一个额外的int变量记录当前数组用了多少个元素(类似于字符串长度)。

对于2,“小数”指的是能用一个int保存的数。注意这里只限4个二进制位(和1里提到的位数一致)。

比如1 2345 6789这个数字,[0]保存6789,[1]保存2345,[2]保存1。长度3。

这个大数乘以小数,比如9999,过程就是[0] * 9999,即6789 * 9999 = 6788 3211,积的低四位(%10000)3211保存到积(大数)的[0],剩下6788的进位到[1]。

然后2345 * 9999 = 2344 7655,加上刚才进位上来的6788得到2345 4443,其中4443保存到积(大数)的[1]中,2345进位到[2]。

以此类推。

对于3,基本只要一个for,对位相加然后注意进位就行了。

大数乘以大数,其实就是第一个大数先乘以第二个大数的[0](大数乘小数,上面的2),得到一个大数A0;然后第一个大数乘以第二个大数的[1],又得到一个大数A1……最后再将A0、A1、……加起来(也就是大数加法,上面的3)。加的时候要7a686964616fe4b893e5b19e31333363393664注意,A1的[0]要和A0的[1]对齐,A2的[0]要和A1的[1]和A0的[2]对齐……这个也和我们竖式笔算一样。

PS:上面的算法基本上是“10000进制数”的计算方式。如果数组的每个元素只保存1个十进制位,那就是10进制数。之所以用10000进制,纯粹是程序员感觉上好一些。最有效的利用,是每个int保存2的15次方,也就是32768进制。要注意到,如果用10进制计算的话,程序的计算耗时会变成10000进制的16倍,也就是效率变成1/16。

PS2:用int数组的话,位数最多只能是4位。因为5位数相乘可能得到11位数,超出了int表示范围。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值