找出n!末尾有几个0?

解法一:找出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位”还有用,同理

 

posted @ 2013-04-02 16:40  一枚程序员  阅读(529)  评论(0编辑  收藏  举报