/**
* 算法描述:
* 分解质因数,即:
* 1*2*3*...*1000 = (2*5)*(2*5)*...*(2*5)
                    *(没有匹配的2或5) //其实地球人都知道2肯定比5多
                                                  //这样其实只需要确定因子5的个数即可
                    *(除2和5以外的其他质因数)
* 其因子中有多少个(2*5)即末尾有多少个0
* 因此问题变成求每个数中2和5因子的个数,再求和
* 最后min(因子2个数的总和,因子5个数的总和)即是所求。
*/
public class SumZero {
  SumZero(){
   max = 1000;//默认值是1000
  }
  SumZero(int n){
   max = n;//可以通过构造函数修改max的值
  }
  
  private int max;
  /**
   * 得到max的因子 m 的个数
   */
  public int getFactor(int m){
   int  count = 0,
         n = max;
  
   //try 中的便是程序的核心
   try{
    while(n%m == 0){//能被m整除则count++
     count++;
     if(n >= m){
      n /= m;
     }
    }
   }
   catch(Exception e){
    e.printStackTrace();
   }
  
   return count;  
  }
  
  /**
   * 得到末尾0的个数
   */
  public int getNumber(){
   int count_2 = 0,//因子2的个数
        count_5 = 0;//因子5的个数

for(int i = 1;i<=max;i++){
    count_2 += getFactor(i,2);//其实没有必要求因子2的个数
    count_5 += getFactor(i,5);
   }
  
   return Math.min(count_2,count_5);//必定有:count_5 < count_2
  }
  public static void main(String[] args){
   System.out.println("1*2*...*1000的末尾有"
                                     +new SumZero().getNumber()
                                     +"个0");
  }
}

///另一种做法(用 BigInteger)

By:believefym

import java.math.*;
public class OneK {
    public static void main(String[] args) {
        BigInteger b = BigInteger.valueOf(1);
        for(int i=1; i<=1000; i++){
            b = b.multiply(BigInteger.valueOf(i));
        }
        String tmp = b.toString();
        int counter=0;
        for(int i=tmp.length()-1; i>0; i--){
            if(tmp.charAt(i)=='0')
                counter++;
            else
                break;
        }
        System.out.println(counter);//249
    }
}

转载于:https://www.cnblogs.com/rousya/archive/2006/02/25/2834848.html

1*2*...*1000的末尾有多少个0?(Java实现)相关推荐

  1. C语言求1000后面有多少个0,1到1000的阶乘 求1000阶乘的结果末尾有多少个0

    急求.用java算1到1000阶乘的末尾有几个零? 急求.用java算1到1000阶乘的末尾有几个零?急求具体的java程序怎么写? 1000的阶乘后面有多少个零? 从1乘到1000得出的结果后面有多 ...

  2. java 求1000的阶乘_求1000阶乘的结果末尾有多少个0

    素数是个科学计算中很重要的一个概念,素数也叫质数.素数就是最纯净的数,没有任何其它成分的数,其它的数都可以说是由素数相乘出来的. 所以,理解好素数,对于数学和程序来说,有重要的意义. 题目是:求100 ...

  3. 【基础】n的阶乘尾部有多少个0 JAVA金典算法-判断一个数(乘积得到的数)的末尾有几个0--发掘

    [基础]n的阶乘尾部有多少个0 我们登堂入室--- 首先看下n的阶乘尾部有多少个0这道题 我们有很多思路可以去解决这道题 比如啊 我们可以先把他的阶乘结果求出来 然后我们转换为字符串 在一一判断是否为 ...

  4. nefu 753 n!末尾有多少个0

    Problem : 753 Time Limit : 1000ms Memory Limit : 65536K description 计算N!末尾有多少个0 input 输入数据有多组,每组1行,每 ...

  5. N的阶乘末尾有多少个0

    例如:N = 5,N! = 120.末尾有1个0. 分析:想到这个问题,有人可能第一反应就是现求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0.但是转念一想,会不会溢出,等等. 其实,从& ...

  6. 每天一道LeetCode-----计算n的阶乘末尾有多少个0

    Factorial Trailing Zeroes 原题链接Factorial Trailing Zeroes 计算n!(n的阶乘)末尾有多少个0 思路: 0实际上来源于10,而10来源于2×5,所以 ...

  7. 编程之美3——N!末尾有多少个0

    因为n!是一个非常大的数,所以不能通过常规的方法,求出n!的值之后,再判断它的末尾有多少个0. 这里的关键就是,n!的末尾有多少个0,取决于n!中,质因数 5 的个数. 如:12!=479001600 ...

  8. 如何判断1024!末尾有多少个0

    分析: 方法一:暴力法   简单的方法就是就算出1024!的值,然后判断末尾有多少个0.但是这种方法有两个非常大的缺点:第一算法效率非常低下:第二:当这个数字比较大的时候直接计算阶乘可能会导致数据溢出 ...

  9. 判断N!末尾有多少个0

    问题:N的阶乘(N!)中的末尾有多少个0? 例如: N = 5,N! = 120.末尾有1个0. N = 10,N! = 3628800.末尾有2个0. 分析:看到这个问题,有人可能第一反应是先求出N ...

最新文章

  1. Jenkins Mac安装更改用户名
  2. 记录一次CPLD资源过少、时序伪例的解决办法
  3. python 井字游戏
  4. 数据类型及pythop运算符号
  5. 单臂路由配置命令_如何通过单臂路由实现VLAN间通信?(配置篇)
  6. 陶哲轩实分析习题8.5.15
  7. java 方法 示例_Java集合syncedSortedSet()方法与示例
  8. WinCE系统的编译过程详解
  9. js学习笔记(十二)——语法速查表
  10. Python入门--字典元素的操作,key的判断(in not in),字典元素删除(del),字典元素的增加,清空(clear()),修改
  11. FPGA信号处理系列文章——数字锁频环
  12. 在Excel表中进行度分秒单位转换
  13. CCIE知识点总结——QoS
  14. sudo rosdep init 失败的解决方法(适用于非自身设备网络、证书等故障的情况)
  15. java post 403_Spring MVC Post请求返回403错误,Get请求却正常,可能是安全框架引起的前端解决办法...
  16. vue3.0项目打包后,由于vender.js 文件过大引起的首页加载时间缓慢的解决方式
  17. [ Oracle EBS ] 资产 摊销调整、累计折旧等介绍
  18. docker jvm调优 tomcat_docker+tomcat 启动时非常慢原因之JRE /dev/random阻塞
  19. 分布式事务之——两段式、三段式
  20. taskctl调oracle存储过程,TASKCTL常见问题和解决方法(FAQ)

热门文章

  1. python 循环语句结果存储_Hello,Python!小鲸教你学Python(八)条件语句和循环
  2. 中改变了值但是数据没有刷新_SwiftUI数据流
  3. Shiro报异常org.apache.shiro.authz.AuthorizationException: Not authorized to invoke method:
  4. mysql alter table_mysql alter table 修改表命令详细介绍
  5. 计算机二级制作简历张静,张静的简历值30分!其他都不是问题
  6. android studio 图表,Android Studio——记账本以及图表可视化实现
  7. linux r后台执行,screen 命令简单用法 Linux后台执行 就用它
  8. linux 755 777是什么权限,linux系统下644、755、777权限详解
  9. AIX安装中文语言包
  10. BeyondCompared4提示“缺少评估信息或损坏” 一条命令解决