问题描述:
输入一个正整数 n, 输出 n! 的值.
其中 n!=1*2*3*...*n.
算法描述
n! 可能很大, 而计算机能表示的整数范围有限, 需要使用高精度计算的方法. 使用一个数组 A 来表示一个大整数 a,A[0] 表示 a 的个位, A[1] 表示 a 的十位, 依次类推.
将 a 乘以一个整数 k 变为将数组 A 的每一个元素都乘以 k, 请注意处理相应的进位.
首先将 a 设为 1, 然后乘 2, 乘 3, 当乘到 n 时, 即得到了 n! 的值.
解题思路:
跟之前的大整数加法类似, 加法是倒序, 满十进一, 而乘法是利用 / 来直接判断余数小于 10. 把各位分解开然后在逐次乘 n.
代码实现:
- #include<stdio.h>
- int main()
- {
- int i,j,n,a[3000]={0},t,s=0,r=0;
- scanf("%d",&n);
- a[0]=1;
- for(i=1;i<=n;i++)
- {
- for(j=0;j<3000;j++)
- {
- s=a[j]*i+r;
- r=s/10;
- a[j]=s%10;
- }
- }
- for(i=2999;i>=0;i--)
- {
- if(a[i]!=0)
- break;
- }
- for(j=i;j>=0;j--)
- printf("%d",a[j]);
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2973333.html