求阶乘尾数“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<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int sum = 0;
	while(n){
		sum += n/5;
		n /= 5; 
	} 
	cout<<sum;
	
	return 0;
} 

            

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值