【leetcode】 Factorial_Trailing_Zeroes

题目:

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

	 /*
	  * 考虑如下情况:
	  * 计算23!的末尾有多少0
	  * 思路:
	  * 	如果要末尾出现0,则必须在乘积中出现  10或者10的倍数。所以在阶乘中找出能有多少个乘积为10或者10的倍数,则知道阶乘有多少个0
	  * 	我们知道只有在  2n*5m 时,才会出现0; 且2的倍数情况多于5,鉴于此,我们只需要统计5的倍数有多少就知道多少个0;
	  *		23/5=4,可知,23!末尾有4个0
	  *
	  * 计算101!的末尾有多少0
	  * 思路:
	  * 	在这里,与上面略微有些区别:最明显一个:假设100,他是增加两个0而不是一个0;
	  * 	此外,例如25.  25*2 =50 ; 此处的确增加一个0;但是50*2=100又增加一个0;(2的数量多于5),所以不能简单的用5来断定0的数目
	  * 	但是我们可以发现如下一个规律:25=5*5   所以每一个25或者25的倍数,都应该多计算一个0;
	  * 	因此对已101: 101/5=20
	  * 				101/25=4
	  * 	101!的阶乘尾部有20+4=24个0
	  * 
	  * 计算1000!的末尾有多少0
	  * 思路:
	  * 	同样的问题还存在于5^3之中,以此类推即可。
	  * */
 public int trailingZeroes(int n) {
		 int count=0;
		 if(n==0)
			 return 0;
		while(n!=0){
			count+=n/5;
			n=n/5;
		}
		 return count;	
	  }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值