求阶乘尾数“0”的个数问题

题目:给定一个正整数n,请计算n的阶乘n!末尾所含有“0”的个数

例如 5!= 120 即输出 1

        10! = 3628800 即输出 2

        。。。。。。

思路:对于数字问题我个人喜欢优先考虑使用动态规划去分析,万一找到规律的了呢    ๑乛◡乛๑

           毕竟这种问题脑补思路写出来的代码肯定要进行时间复杂度的优化    _(:з」∠)_


分析: 1! = 1 =>0    2!= 2 =>0    3!= 6 =>0    4!= 24 =>0    5!= 120 =>1    

            由 2—5的阶乘 我发现只有5的阶乘出现了0    那是不是意味着阶乘尾数0只和5有关呢?(..•˘_˘•..)

            于是就是测试下10! 15!20!

            10!= 3628800 => 2    15!=   1307674368000 =>3    20!= 2432902008176640000 =>4

            我发现好像真的有那么点道理哦? 可是如果真的只是算5的话这题目是不是太简单了呢?于是我还是多找几组数据来测试一下吧

            25!= 15511210043330985984000000 =>6     (¬_¬)    果然不是这么简单就能算出来的 到这里突然从 4 变成了 6

            想去看看30的阶乘 发现已经超出计算机显示范围了    2.6525285981219105863630848e+32   

            于是就只能这样打表了:

            5 => 1    10 => 2    15 => 3    20 => 4    25 => 6

            找规律:

            5/5 = 1    1/5 = 0    =>    1+0 = 1

            10/5 = 2    2/5 = 0    =>    2+0 = 2

            15/5 = 3    3/5 = 0    =>    3+0 = 3

            25/5 = 5    5/5 = 1    =>    5+1 = 6

            好像就是这么回事哎?   ≖‿≖✧

            所以 n! 的尾数0 就是 不断累加 n/5 直到 n=0为止    最后附上代码

#include
using namespace std;
int main(){
	int n;
	cin>>n;
	int sum = 0;
	while(n){
		sum += n/5;
		n /= 5; 
	} 
	cout<

            

你可能感兴趣的:(竞赛累计,编程,动态规划,阶乘末尾0的个数,大数)