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
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里的记忆吖~
要做一个永远都有情怀的程序员.

你可能感兴趣的:(C++,c++,算法,c语言)