1*2*...*1000的末尾有多少个0?(Java实现)
/**
* 算法描述:
* 分解质因数,即:
* 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实现)相关推荐
- C语言求1000后面有多少个0,1到1000的阶乘 求1000阶乘的结果末尾有多少个0
急求.用java算1到1000阶乘的末尾有几个零? 急求.用java算1到1000阶乘的末尾有几个零?急求具体的java程序怎么写? 1000的阶乘后面有多少个零? 从1乘到1000得出的结果后面有多 ...
- java 求1000的阶乘_求1000阶乘的结果末尾有多少个0
素数是个科学计算中很重要的一个概念,素数也叫质数.素数就是最纯净的数,没有任何其它成分的数,其它的数都可以说是由素数相乘出来的. 所以,理解好素数,对于数学和程序来说,有重要的意义. 题目是:求100 ...
- 【基础】n的阶乘尾部有多少个0 JAVA金典算法-判断一个数(乘积得到的数)的末尾有几个0--发掘
[基础]n的阶乘尾部有多少个0 我们登堂入室--- 首先看下n的阶乘尾部有多少个0这道题 我们有很多思路可以去解决这道题 比如啊 我们可以先把他的阶乘结果求出来 然后我们转换为字符串 在一一判断是否为 ...
- nefu 753 n!末尾有多少个0
Problem : 753 Time Limit : 1000ms Memory Limit : 65536K description 计算N!末尾有多少个0 input 输入数据有多组,每组1行,每 ...
- N的阶乘末尾有多少个0
例如:N = 5,N! = 120.末尾有1个0. 分析:想到这个问题,有人可能第一反应就是现求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0.但是转念一想,会不会溢出,等等. 其实,从& ...
- 每天一道LeetCode-----计算n的阶乘末尾有多少个0
Factorial Trailing Zeroes 原题链接Factorial Trailing Zeroes 计算n!(n的阶乘)末尾有多少个0 思路: 0实际上来源于10,而10来源于2×5,所以 ...
- 编程之美3——N!末尾有多少个0
因为n!是一个非常大的数,所以不能通过常规的方法,求出n!的值之后,再判断它的末尾有多少个0. 这里的关键就是,n!的末尾有多少个0,取决于n!中,质因数 5 的个数. 如:12!=479001600 ...
- 如何判断1024!末尾有多少个0
分析: 方法一:暴力法 简单的方法就是就算出1024!的值,然后判断末尾有多少个0.但是这种方法有两个非常大的缺点:第一算法效率非常低下:第二:当这个数字比较大的时候直接计算阶乘可能会导致数据溢出 ...
- 判断N!末尾有多少个0
问题:N的阶乘(N!)中的末尾有多少个0? 例如: N = 5,N! = 120.末尾有1个0. N = 10,N! = 3628800.末尾有2个0. 分析:看到这个问题,有人可能第一反应是先求出N ...
最新文章
- Jenkins Mac安装更改用户名
- 记录一次CPLD资源过少、时序伪例的解决办法
- python 井字游戏
- 数据类型及pythop运算符号
- 单臂路由配置命令_如何通过单臂路由实现VLAN间通信?(配置篇)
- 陶哲轩实分析习题8.5.15
- java 方法 示例_Java集合syncedSortedSet()方法与示例
- WinCE系统的编译过程详解
- js学习笔记(十二)——语法速查表
- Python入门--字典元素的操作,key的判断(in not in),字典元素删除(del),字典元素的增加,清空(clear()),修改
- FPGA信号处理系列文章——数字锁频环
- 在Excel表中进行度分秒单位转换
- CCIE知识点总结——QoS
- sudo rosdep init 失败的解决方法(适用于非自身设备网络、证书等故障的情况)
- java post 403_Spring MVC Post请求返回403错误,Get请求却正常,可能是安全框架引起的前端解决办法...
- vue3.0项目打包后,由于vender.js 文件过大引起的首页加载时间缓慢的解决方式
- [ Oracle EBS ] 资产 摊销调整、累计折旧等介绍
- docker jvm调优 tomcat_docker+tomcat 启动时非常慢原因之JRE /dev/random阻塞
- 分布式事务之——两段式、三段式
- taskctl调oracle存储过程,TASKCTL常见问题和解决方法(FAQ)
热门文章
- python 循环语句结果存储_Hello,Python!小鲸教你学Python(八)条件语句和循环
- 中改变了值但是数据没有刷新_SwiftUI数据流
- Shiro报异常org.apache.shiro.authz.AuthorizationException: Not authorized to invoke method:
- mysql alter table_mysql alter table 修改表命令详细介绍
- 计算机二级制作简历张静,张静的简历值30分!其他都不是问题
- android studio 图表,Android Studio——记账本以及图表可视化实现
- linux r后台执行,screen 命令简单用法 Linux后台执行 就用它
- linux 755 777是什么权限,linux系统下644、755、777权限详解
- AIX安装中文语言包
- BeyondCompared4提示“缺少评估信息或损坏” 一条命令解决