文章

10

粉丝

179

获赞

5

访问

31.1k

头像
大阶乘超详细解析
推荐阅读
P1174 清华大学上机题
发布于2023年2月12日 10:21
阅读数 3.3k

用整型数组来保存大阶乘结果。

原理:因为根据乘法的原理两个数相乘,这样可以保证每次相乘的数能够被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相乘就...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发