文章
10
粉丝
179
获赞
5
访问
31.8k
用整型数组来保存大阶乘结果。
原理:因为根据乘法的原理两个数相乘,这样可以保证每次相乘的数能够被int容纳下
(假设都是三位整数)可以看作a分别乘上b的个位,然后只保留结果的个位赋给数组,将剩余的前面的所有位赋给进位数
,然后将a乘上b的十位,并将刚才各位进位的数加上这次的结果,然后再保留个位,将剩余的前面的所有位赋给进位数
然后将a乘上b的百位,并将刚才各位进位的数加上这次的结果,然后再保留个位,将剩余的前面的所有位赋给进位数
最后数组里面保存的就是这次阶乘的结果。
举例子:234*55
可以变为:4*55=220,保留0,将22赋给进位数,
3*55+22=187,保留7,将18赋给进位数
2*55+18=128,保留8,将12赋给进位数
由于a已经没有位可以被乘,所以将12直接放在最前面
得到的结果刚好是12870,就是234*55的结果
具体流程就是下面这一小段代码:
int carry=0,temnum=0;//carry为进位数,temnum用来暂存每次a乘上b的每个位再加上进位carry得到的数
jiesum[0]=1;//将初始位赋1
for(int i=2;i<=n;i++){//从2开始阶乘,一直乘到给定要求阶乘的数,就是2*3*4*5*6*...........*n
for(int j=0;j<3005;j++){//3005是最大位数,因为1000个1000相乘就...
登录后发布评论
暂无评论,来抢沙发