阶乘末尾零的个数

来源:互联网 发布:唐氏筛查计算软件下载 编辑:程序博客网 时间:2024/04/29 08:55

题目描述

请设计一个算法,计算n的阶乘有多少个尾随零。

给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数。

测试样例:
5

返回:1

思路:对N!进行质因数分解,N!=2的X次方*3的Y次方*5的Z次方*.....因为10=2*5,所以末尾零的个数只与X和Z相关,每一对2和5相乘可以得到一个10,因为X大于等于Z,所以只要求出Z的值即可。

代码:

class Factor {public:    int getFactorSuffixZero(int n) {        // write code here        int result=0;        int j;        for(int i=1;i<=n;i++){            j=i;            while(j%5==0){                result++;                j=j/5;            }        }                return result;    }};

更简便的,找出1-n之间5的倍数的数的个数,即直接数一数5有几个5的倍数,有几个25的倍数...依次类推,注意:【N/k】等于1,2,3,...,N中能被k整除的数的个数。
class Factor {public:    int getFactorSuffixZero(int n) {        // write code here        int result=0;        for(int i=5;n/i>0;i*=5)            result+=n/i;        return result;    }};



0 0
原创粉丝点击