给定一个整数 n ,返回 n! 后果中尾随零的数量。
提醒 n! = n (n – 1) (n – 2) … 3 2 1
//首先,一个数只有因子含有10才会有尾随0
//其次,10能够由2和5两个质数相乘失去
//之后,因为任何一个整数的阶乘蕴含因子2的个数都大于因子5的个数
//所以,最终只须要统计n!含有多少个因子5
//拿1000!举例,1~1000,其中含有1000/5,即200个5的倍数
//若这200个数都含有1个因子5,那间接返回200就好
//然而含有因子5的个数有不止一个的
//所以须要计算含有2个的,也就是能被25整除的
//以此类推再计算含有3个的,直到被除数大于n完结
public int trailingZeroes(int n) {
int res = 0, tmp = 5;
while (tmp <= n) {
res += n / tmp;
tmp *= 5;
}
return res;
}
发表回复