笔试智力题N的阶乘末尾0的个数

    这几天刷牛客的笔试智力题,遇到了不少类似这样的选择题,刚好看到有位大佬写了分析过程,就总结下来给遇到同样问题的人分享。
问题描述

    给定一个整数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

发布了19 篇原创文章 · 获赞 24 · 访问量 5536

猜你喜欢

转载自blog.csdn.net/weixin_44268113/article/details/104203824
今日推荐