找出有多少非负整数,其阶乘的结果有k个0
那先来看看,每个数的阶乘的结果有多少个0:
0~4的阶乘,有0个0
5~9的阶乘,有1个0
10~14的阶乘,有2个0
........
如果阶乘的结果存在k个0,那就对应有有五个数
如果阶乘的结果不存在k个0,那就0个数
相当于说k有效(存在数的阶乘的结果有k个0),就返回5;k无效(没有任何数的阶乘的结果有k个0),就返回0。
所以问题在于,怎么知道k有没有效。
好吧,记住一下几个数字。
1
6,6=5+1
31,31=25+5+1
156,156=125+25+5+1
........
所有无效的k都与以上这些数字有关。
代码如下:
class Solution {
public:
int preimageSizeFZF(int K) {
int i=1,sum=1;
while(K>sum) sum+=(i*=5);//sum=1+5+25+125+...
if(K<sum)//保证K>=sum
{
sum-=i;
i/=5;
}
int c=K-sum;//求差值
while(c)
{
if(sum==1&&K==5) return 0;
if(c/sum==5||c%sum==5) return 0;//差值与5有关的,就是无效
c%=sum;
sum-=i;
i/=5;
}
return 5;
}
};