传送门
对于任意一个数,×10就能使它尾部多一个0。分析一下样例,n=5时n!=12345=120,其实就是134(25) = 12 * 10。即,产生一个末尾0的原因是累乘的数里能凑一个“10”出来。那么我们只需要统计相乘的n个数有能凑几个10就行。更进一步简化, 由于10=2*5,且固定的范围内,因子5总是比因子2要少。所以,可以直接统计所有累乘的因子里5的数量。
class Solution {
public:
int trailingZeroes(int n) {
if (n == 0) return 0;
/*
* 对于任意一个数,×10就能使它尾部多一个0
* 分析一下样例,n=5时n!=1*2*3*4*5=120,其实就是1*3*4*(2*5) = 12 * 10
* 即,产生一个末尾0的原因是累乘的数里能凑一个“10”出来
* 那么我们只需要统计相乘的n个数有能凑几个10就行
* 更进一步简化, 由于10=2*5,且固定的范围内,因子5总是比因子2要少
* 所以,可以直接统计所有累乘的因子里5的数量。
*/
int cnt = 0;
for (int i = 1; i <= n; i++) {
int j = i;
while(j > 0) {
if (j % 5 == 0) {
cnt++;
j /= 5;
} else {
break;
}
}
}
return cnt;
}
};
评论
评论功能已经关闭!