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)中的第二种思路解决即可。


本文转载自海 子博客园博客,原文链接:http://www.cnblogs.com/dolphin0520/archive/2011/04/13/2014529.html如需转载自行联系原作者

相关文章
|
4月前
|
C++ 索引
字符串中的第一个唯一字符(C++)
字符串中的第一个唯一字符(C++)
24 0
|
5月前
|
Java
【剑指offer】- 第一个只出现一次的字符位置-34/67
【剑指offer】- 第一个只出现一次的字符位置-34/67
|
7月前
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
|
10月前
删除数组中指定的数字
删除数组中指定的数字
65 0
|
11月前
剑指offer 51. 字符串中第一个只出现一次的字符
剑指offer 51. 字符串中第一个只出现一次的字符
50 0
|
11月前
|
索引
字符串中的第一个唯一字符
字符串中的第一个唯一字符
48 0
|
算法
LeetCode:28. 找出字符串中第一个匹配项的下标
题目描述:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
|
算法 Java C语言
找出字符串中第一个匹配项的下标 (LeetCode 28)
找出字符串中第一个匹配项的下标 (LeetCode 28)
180 0
|
C语言
查找某字符串出现的位置,并且输出该第一个字母所在的位
查找某字符串出现的位置,并且输出该第一个字母所在的位
102 0
查找某字符串出现的位置,并且输出该第一个字母所在的位
第一个只出现一次的字符
第一个只出现一次的字符
34 0