n的阶乘末尾有多少个0?

1.先求res = n!,然后 tmp = res %10, if(tmp ==0)count++,造成问题,n!的增长很夸张,一不小心就溢出了

2.追究到底,这种题目还是找规律的题

 会发现2*5=10,这样子就多出来一个0了,所以问题可以转化成求有多少对2和5,但2的个数明显比5还要多,所以只关心5的个数就好了。当然了,有时候一个数里可不止一个5,比如25=5*5,125=5*5*5。

那么问题来啦,怎么求有多少个5呀?

 

5! :1*2*3*4*5 有一个5 ,

10!: 1*2*3*4*5*6*7*8*9*10 有2个5(10=2*5)

15!:1*...*5*...*10*...*15有3个5(15=3*5) 

20!: 1*...*5*...*10*...*15*...*20有4个5

25! : 1*2*3*4*5*6*7*8*9*10 ..15 ..20 ..24*25 有6个5(因为25=5*5)

50!: 5,10,15,20,25,30,35,40,45,50有12个5,因为有2个25,多了两个5

那60的话, 单独的5有12个,多出来2个25(25有一个25,50有一个25),多了两个5,所以是14个5
 

会发现,

25里面,5的个数:25/5=5(5的个数), 5/5=1(25的个数),所以是5+1=6

50里面,5的个数:50/5=10, 10/5 = 2, 所以是10+2 = 12

100里面,5的个数:100/5=20,20/5=4,所以是24

125里面,5的个数:125/5=25(5的个数),25/5=5(25的个数),5/5=1(125的个数),所以是31
假如n = 2019好了

2019!里面5的个数:2019/5=403个

2019!里面25的个数:403/5=80个(多出来的5)

2019!里面125的个数:80/5=16个(多出来的5)

2019!里面625的个数:16/5=3个(多出来的5)

所以一共有5的个数:403+80+16+3=502

 public static int sumOfFive(int n){
         if(n<5) return 0;
	   
		n/=5;
		return n+sumOfFive(n);
    }

 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值