这几天刷牛客的笔试智力题,遇到了不少类似这样的选择题,刚好看到有位大佬写了分析过程,就总结下来给遇到同样问题的人分享。
问题描述
给定一个整数N,那么N的阶乘末尾有多少个0?
分析:一个数乘以10就会产生一个0,10=2x5,问题转化为N!能够分解成多少对2x5。再一步分析发现,在N!中能够被2整除的数一定比能够被5整除的数多,于是问题近似转化为求1…N中能够被5整除的数有多少个。
N=20时,1~20可以产生4个5,分别为5,10=2x5, 15=3x5, 20=4x5
N=24时,1~24可以产生4个5
N=25时,1~25可以产生6个5,分别为5,10=2x5, 15=3x5, 20=4x5, 25=5x5。主要因为25贡献了2个5,同理125贡献了3个5…
可以发现,产生5的个数为sum=N/5+N/5^2 +N/5^3+…
则N!末尾0的个数为:N/5+N/25 +N/125+N/625+N/3125…
java代码:
int f(int n){
return n==0 ? 0 : n/5+f(n/5);
}
例题: 2015!后面有几个0?
解析:2015/5=403, 2015/25=80, 2015/125=16, 2015/625=3
所以总共会产生403+80+16+3=502个
答案:502