题目描述
请设计一个算法,计算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;
}
};