输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2
输入描述:

输入为一行,n(1 ≤ n ≤ 1000)

输出描述:

输出一个整数,即题目所求

输入例子:

10

输出例子:

2

3 收藏


直接登录
最新评论
  • loredp   02/13

    应该是等于n除以5的结果

    • 对的,能够产生0   除了5 就是0  而0的整数又是5的倍数

      • 食人的鱼   02/14

        不对吧,25是5的倍数,但是会产生两个0,我觉得应该是n/5+n/25+n/125+n/625+……

         

      • 吟游_   02/14

        n除以5,相当于计算是5的倍数的数有多少个,要构成10的倍数,必须与偶数相乘(偶数数目必然大于5的倍数的数目的一倍,所以即使本身就是整数也可以和偶数相乘),其一,如果按规则2×5,4×10,6×15……14×25=350,其结果去零后包含35,而4×10去零后为偶数,又可再次结合,并非一个5的倍数就对应一个零。其二,100这个5的倍数会产生两个0。

  • 这道题的意义在于

  • Leave me alone linux c/c++ 02/14

    n 除以5的商就是0的个数!不管余数.

     

  • micro 软件攻城狮 02/14

    转换成字符串处理简直不要太简单

  • Leave me alone linux c/c++ 02/14

    因为有5的都会产生0,

    n = 10的话, 有 5, 5*2 , 有两个5

    n = 15的话,有 5, 5*2, 5*3 有三个5

    以此类推

  • 东华 C# 02/14

     

  • Warchaser   02/15

    200的阶乘结果,末尾有49个0。所以,要实现的话,是算法算出来?还是正向,先求阶乘结果,再看末尾有多少个0?且要不要有大数计算的因素在这里,因为200!有375位。

  • 阏男秀   02/16

    打印结果:

    2
    24
    49

  • loskael   02/16

     

  •  

  • @Test
    /**
    * n(1<=n<=1000)的阶乘的末尾有几个0
    * 如n=10,阶乘为3628800,答案为2
    * 思路:数字0-9两两相乘,末尾带0的组有:
    * 0*任意这10个数字,这种情况直接+1
    * 2*5
    * 4*5
    * 5*6
    * 5*8
    * 没有1,3,7,9,进而想到末尾都不带0的两个数字相乘,结果是否带0取决于这两个数字的个位
    * 故处理方式如下:
    * n*(n-1),取末尾0个数记录下,取末尾最后一个非0数字,同(n-2)相乘,
    * 记录0个数,再取最后一个非0数字,依次知道乘以2,0的总个数结果就出来了。
    * (实际实现时从小到大)n=1000时答案为247
    */
    public void findZeroNum4Factorial(){
    int n=1000;
    int mul=2;
    String mulStr=””;
    int zeroNum=0;
    String lastWord=””;
    for (int i = 3; i <=n; i++) {
    mul*=i;//优化:该步进行前,可取i末尾不为0的数字来取代i,并将末尾0的个数累加给zeroNum
    mulStr=””+mul;
    for (int j = mulStr.length()-1; j >= 0; j–) {
    lastWord=String.valueOf(mulStr.charAt(j));
    if(“0”.equals(lastWord)){
    zeroNum++;
    }else{
    mul=Integer.valueOf(lastWord);
    break;
    }
    }
    }
    System.out.println(zeroNum);
    }

  • 胖胖 学生 02/25

    js代码