N!末尾有多少个0

问题分析:对于N!,想要知道其末尾有多少个0,则可以分解为问题能被多少个10整除,继续分解,被10整除,则必能同时被2和5整除。则对N!进行质因数分解,N!=(2^x)*(3^y)*(5^z)*...,可得N!=2^p*5^q+r,1<p<x,1<q<z,因为每一对2*5可以得到10,即1个0,则一共有多少对2*5要看min(x,z)的大小,则令A=min(x,z);显而易见x>z
一:则M=1+2+...+k,存在一个k使得5*k<=N!
二:则M=N!/5+N!/5^2+...N!/5^k,存在一个k,使得N!/5^(k+1)=0,5^k<=N!,5^(k+1)>N!

代码如下:

View Code
#include<iostream>
using namespace std;

int num_nFun(int n)
{
    int sum = 0;
    while(n)
    {
        sum += n/5;
        n /= 5;
    }
    return sum;
}

int num_nFun1(int n)
{
    int sum = 0;
    for(int i = 1; i <= n; i++)
    {
        int num = i;
        //int count = sum;
        while(num % 5 == 0)
        {
            sum++;
            //cout<<num<<":"<<sum-count<<endl;
            num /= 5;
        }
    }
    return sum;
}
int main()
{
    int n;
    cin>>n;
    cout<<num_nFun(n)<<endl;
    cout<<num_nFun1(n)<<endl;
    return 0;
}

 

 

posted @ 2012-09-06 10:44  山野樵夫  阅读(214)  评论(1编辑  收藏  举报