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如需转载自行联系原作者

相关文章
|
1天前
|
索引 容器
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
|
7天前
|
算法 测试技术 C#
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
|
3月前
|
C++ 索引
字符串中的第一个唯一字符(C++)
字符串中的第一个唯一字符(C++)
24 0
|
4月前
|
Java
【剑指offer】- 第一个只出现一次的字符位置-34/67
【剑指offer】- 第一个只出现一次的字符位置-34/67
|
6月前
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
字符串转数组、数组转字符串、给第一个单词色值
字符串转数组、数组转字符串、给第一个单词色值
|
10月前
|
索引
字符串中的第一个唯一字符
字符串中的第一个唯一字符
48 0
|
C语言
查找某字符串出现的位置,并且输出该第一个字母所在的位
查找某字符串出现的位置,并且输出该第一个字母所在的位
99 0
查找某字符串出现的位置,并且输出该第一个字母所在的位
第一个只出现一次的字符
第一个只出现一次的字符
34 0
写一个函数,可以逆序一个字符串的内容
写一个函数,可以逆序一个字符串的内容
77 0