解法一:找出n!中质数2和质数5的个数,由于能被2整除的数的个数比能被5整除的数多的多,因为只需求出质数5的个数。利用Z=[Z/5]+[Z/25]+[Z/125]+....,其中[Z/5]表示<=z的数中含有质数5的个数。。代码:
#include<iostream> using namespace std; int main() { int n,sum; sum=0; cin>>n; while(n) { n/=5; sum+=n; } cout<<sum<<endl; system("pause"); return 0; }
解法二:代码:
#include<iostream> using namespace std; int main() { int n; int num,p; n = 0; cin>>num; for(int i=1; i<=num; i++) { p = i; while(p % 5 == 0) { p/= 5; n++; } } cout<<n<<endl; return 0; }
解法三(存储一定数):代码:
#include<iostream> using namespace std; int main() { int nNum,sum,i,loop; while(cin>>nNum) { sum=1; loop=0; for(i=nNum;i>=1;i--) { sum*=i; while(sum%10==0)//消0 { sum/=10; loop++; } if(sum>=100000)//保存末尾5位数字即可 sum%=100000; } while(sum%10==0)//消0 { sum/=10; loop++; } cout<<loop<<endl; } return 0; } //这种解法后面解“从最末一个非0位开始自低位向高位数的第1或K位”还有用,同理