N!的末尾有多少个0

N!的末尾有多少个0

已经很久没有打开过我的电脑的devC++了,而且可能有将近两年没有写过c++了,好怀念呀~
正好遇到一道题,看到了熟悉的C++代码,就来写一篇吧~

题目

50!的末尾有多少个0?
扩展:N!的末尾有多少个0?

思考

多数相乘末尾的0的个数 = 乘法中能够生成的10的个数
-> 10 = 2*5
-> 乘数里<2,5>的组合数
-> 连续的自然数中,2的倍数个数远大于5的倍数个数
-> 只需要求连续的N个数中能够生成5的数的个数

举例

50!的末尾有多少个0?
-> 1-50中能够生成5的数的个数:
1.首先,每5个数都能获得某个数是5的倍数,即有:5,10,15,20,25,30,35,40,45,50.
个数为:50/5
2. 其次,有一些数能够因式分解成2个5(在第一步算过一个5了):即25,50。
个数为: 50/5*5
4. 由于50以内的数不能因式分解成>=3个5,所以结束,结果为1和2步结果之和。
即结果为10+2=12.

代码

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int res=0;
	while(1)
	{
		if(n<5)
		{
			break;
		}
		res+=n/5;
		n=n/5;
	}
	cout<<res;
	return 0;
}

刚刚写代码的时候发现我之前某个时候因为电脑c盘内存不够把devC++卸载了,然后在在线编译器中写代码的时候,我真的真的好怀念啊,是熟悉的感觉,是DNA里的记忆吖~
要做一个永远都有情怀的程序员.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值