【GZOJ】1372——阶乘

博客介绍了如何在C或C++中使用高精度算法计算阶乘,特别是当数值达到5000时,常规类型无法存储阶乘结果。通过使用数组模拟大数并进行按位运算和进位处理,实现大整数乘以小整数的方法。文章以1872381乘以8为例,详细解释了高精度乘法的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接广大OJ1372
本题亦为广大15级第一次周赛的J题。

题目内容

Problem Description
阶乘的计算公式是:n!=1*2*3*4*5*……*n

例如说,2的阶乘是2,3的阶乘是6

现在要做的程序是,输入一个数n,输出n的阶乘。

Input
多组输入数据。

每组输入数据占一行,为一个整数n(1<=n<=5000)

Output
对于每组输入,输出n的阶乘,占一行。
Sample Input
3
2
Sample Output
6
2
Hint
注意细节。

解题思路

所谓细节就是,n的最大值可以是5000。这意味着n的阶乘会非常大,大到连long long都无法储存。
对于这种题,用Java的大整数类解决无疑是最方便也是最快的。不过这里讨论的是C或者C++的解法,也就是高精度算法中的大整数数乘以小整数。
高精度算法的核心思想就是,使用一个数组来储存一个大数,按位储存。
例如说,用这个方法储存数字182738,就可以建一个数组a[],令a[0]=1,a[1]=8,a[2]=2,a[3]=7,a[4]=3,a[5]=8。当然也可以反过来(反过来的话计算会方便一些)。
然后是高精度数字的计算方法。高精度数字的加减乘除其实可以参考我们小学所学的竖式运算方式,容易理解而已也很好用。(所以我们小学是学了什么不得了的东西了吗= =)
例如说这道题需要到的大整数乘以小整数,以1872381*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值