zoukankan      html  css  js  c++  java
  • 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)中的第二种思路解决即可。

  • 相关阅读:
    IE 浏览器版本切换
    NOIP 模拟赛 简单题
    NOIP 模拟赛 左右横跳
    [LNOI2014]LCA
    JZOJ 4216.平方和
    [ZJOI2013]K大数查询
    JZOJ 3207.Orthogonal Anagram
    【模板】笛卡尔树
    hadoop 之 某一个datanode启动失败(Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to)
    java对象的序列化与反序列化
  • 原文地址:https://www.cnblogs.com/dolphin0520/p/2014529.html
Copyright © 2011-2022 走看看