n!末尾有多少个0以及n!末尾第一个非0数字

(1)n!末尾有多少个0

    第一种思路:

    n!=n*(n-1)*(n-2)*....3*2*1,而如果要出现0,必须得有2和5出现,但是明显n!中5的因子个数少于2的因子个数,即转化为求 n!中因子5的个数

    int count(int n)

    {  

    int sum=0;

           while(n)

           {

      sum+=n/5;

                 n/=5;

           }

           return sum;

     }

     第二种思路:计算n!,每次末尾出现0,则将0消去,计数器并自增1

      int count=0;

      int ans=1;

        for(i=n;i>=2;i--)
        {
            ans*=i;
            while(ans%10==0)        //消除末尾的0
            {

                ans/=10;

                count++;
            }
            if(ans>=100000)           //只需保存末尾5位数字即可
                ans%=100000;

        }

          while(ans%10==0)        //消除末尾的0
          {

                ans/=10;

                count++;
          }

         count即为所求

(2)n!末尾第一个非0数字

    两种思路

    第一种:直接求出n!,然后得出结果

    第二种:按照问题(1)中的第二种思路解决即可。

转载于:https://www.cnblogs.com/dolphin0520/archive/2011/04/13/2014529.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值