问题描述:
输入一个正整数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!的值。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
解题思路:
跟之前的大整数加法类似,加法是倒序,满十进一,而乘法是利用/来直接判断余数小于10。把各位分解开然后在逐次乘n。
代码实现:
1 #include<stdio.h> 2 int main() 3 { 4 int i,j,n,a[3000]={0},t,s=0,r=0; 5 6 scanf("%d",&n); 7 8 a[0]=1; 9 for(i=1;i<=n;i++) 10 { 11 for(j=0;j<3000;j++) 12 { 13 s=a[j]*i+r; 14 r=s/10; 15 a[j]=s%10; 16 } 17 } 18 19 for(i=2999;i>=0;i--) 20 { 21 if(a[i]!=0) 22 break; 23 } 24 for(j=i;j>=0;j--) 25 printf("%d",a[j]); 26 27 return 0; 28 }