码迷,mamicode.com
首页 > 其他好文 > 详细

求N!中末尾有多少个0

时间:2014-07-02 09:54:52      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:阶乘

分析:

对N进行质因数分解 N=2^x * 3^y * 5^z...,由于10 = 2*5,所以末尾0的个数只和x与z有关,每一对2和5相乘可以得到一个10,于是末尾0的个数=min(x,z)。在实际中x是远远大于z的,所以我们只要求出z的值即可。
  根据公式
  z = N/5 + N/5^2 + N/5^3+...+N/5^k
  这表明,5的倍数贡献了一个5,5^2的倍数又贡献了一个5...。
  比如:25其实是贡献了2个5,但是在N/5中已经贡献了一个,所以在N/5^2中再贡献一个;同样,125在N/5中贡献一个,在N/5^2中贡献一个,在N/5^3中再贡献一个,一共是3个。


代码:

	public int getContinueZero(int num){
		int countOfZero = 0;
		while(num>0)
		{
			countOfZero+=num/5;
			num/=5;
		}
		return countOfZero;
	}

用同样思路解下一题:

求N!的二进制中最低位1的位置。实际上就是判断二进制末尾有多少个0,然后位置=0的个数+1;

判断二进制末尾0的个数可以用右移操作来完成。而二进制每次右移一位相当于十进制除以2,直到除不够为止。所以归根结底就是要求N!质因数分解的2的个数x。这个操作与上面求5的个数如出一辙。

求N!中末尾有多少个0,布布扣,bubuko.com

求N!中末尾有多少个0

标签:阶乘

原文地址:http://blog.csdn.net/cow__sky/article/details/36190587

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!