zoukankan      html  css  js  c++  java
  • nyoj 84阶乘后0的个数

    描述

    计算n!的十进制表示最后有多少个0

    输入
    第一行输入一个整数N表示测试数据的组数(1<=N<=100)
    每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
    输出
    输出M的阶乘的十进制表示中最后0的个数
    比如5!=120则最后的0的个数为1
    样例输入
    6
    3
    60
    100
    1024
    23456
    8735373
    分析: http://www.cnblogs.com/hansongjiang/archive/2014/05/06.html
    0来源于2*5,且将N!中分解后,2的个数大于5的个数所有,0的个数就等于N!中银子5的个数。
    f(n!)=1*2*3*4*5*6*7*…(2*5)…(3*5)***(4*5) ….(k*5)* … n
          只考虑5的倍数:其他的必然没有5.
           抽取出来:
    5*(1*2*3*k*) (其他的数) 现在已经有k个5了,但是K!中可能含有5,公式为
    f(n)=k+f(k!) k=n/5;
    k<5,时候,没有0,所以f(n!)=0;k<=4;
    递归写法就很简单了。
    int fun(int n)
    {
    if(n<=4) return 0;
    else return fun(n/5)+n/5;
     
    }
    仔细分析后,其实最终就是求N!因子5的个数。
    private static int fun2(int n) {
            // TODO Auto-generated method stub
            int count=0;
            for(int i=5;i<=n;i=i+5)
            {
                if(i%5==0)
                {
                int j=i/5;
                    count++;
                    while(j%5==0)
                    {
                        count++;
                        j=j/5;
                        
                        
                    }
                    
                    
                    
                }
                
                
                
            }
            return count;
            
        }
     
     
    在nyoj 提交之后发现,递归的效果还不错。
     
     
     
    image
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    ECMAScript 6 字符串的扩展
    iOS蓝牙开发
    PhotoKit type类型
    HealthKit详解
    苹果证书签名机制
    小程序事件传递
    小程序跳转界面传可变参数
    小程序获取openId
    小程序发起post请求回调成功没有数据
    主干发布和分支发布
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3711148.html
Copyright © 2011-2022 走看看