1 //大数阶乘-模拟手工算法 2 #include <iostream> 3 #define N 3000 4 #include<cstring> 5 using namespace std; 6 int a[N]; //定义大型整型数组 7 int main( ) 8 { 9 int n,i,j,c,s; 10 cin>>n; 11 memset(a,0,sizeof(a)); //数组清零 12 a[0]=1; //a[0]赋值为1 13 for(j=2;j<=n;j++) //乘以j 14 { 15 c=0; //是否进位 16 for(i=0;i<N;i++) 17 { 18 s=a[i]*j+c; 19 a[i]=s%10; 20 c=s/10; 21 } 22 } 23 for(i=N-1;i>=0;i--) 24 if(a[i]) break; //忽略前导零 25 for(j=i;j>=0;j--) //倒序输出 26 cout<<a[j]; 27 28 cout<<endl; 29 system("PAUSE"); 30 return 0; 31 }
example:
100!=
2.
统计阶乘n!的末尾0的个数
1 #include <cstdlib> 2 #include <iostream> 3 4 using namespace std; 5 6 int main(int argc, char *argv[]) 7 { int n; 8 cin>>n ; 9 int count=0; 10 do{ 11 n/=5; 12 count+=n; 13 }while(n); 14 cout<<count<<endl; 15 16 system("PAUSE"); 17 return EXIT_SUCCESS; 18 }