黑马程序员技术交流社区
标题:
编程求1000!末尾有几个零
[打印本页]
作者:
丑小子799
时间:
2014-11-22 08:15
标题:
编程求1000!末尾有几个零
入学测试题,求大神解答
作者:
chen_32768
时间:
2014-11-22 08:35
我的注释还是比较清楚地。认真看能看懂,这个方法比较容易明白,就是用一个BigInteger接收结果,还有一种是把0替换成""空,然后算出替换前和替换后的长度差就是有多少个0
package com.test.nine;
import java.math.BigInteger;
/*思路:1.因为求出1000!之后数值太大,需要使用math.BigInteger,可以解决大数问题。
* 2.首先创建一个BigInteger对象,容纳计算结果。
* 3.for循环循环相乘。(1*(1+1)*(1+1+1)····*1000)
* 4.得出结果后,将BigInteger的对象用字符串表示。
* 5.for循环,使用str.charAt(i)方法搜寻有多少个0,有的话count++。
* 6.打印结果*/
public class JieChengTo1000 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger end = new BigInteger("1");
int count = 0;
// !1*1000的阶乘,end为接收结果的BigInteger
for (int i = 1; i <= 1000; i++) {
// BigInteger(String val)
// 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。
// BigInteger为类,需要创建对象
end = end.multiply(new BigInteger(i + ""));
}
//System.out.println(end);
String str = end.toString();
// 遍历字符串。判断为0的时候count+1
for (int i = 0; i < str.length(); i++) {
//比較的是Char類型,所以用''
if (str.charAt(i) == '0') {
count += 1;
}
}
System.out.println(count);
}
}
复制代码
作者:
丑小子799
时间:
2014-11-22 09:20
谢了,我自己敲敲试试
作者:
kerner
时间:
2014-11-22 09:26
package myfirsttest;
/* 因为1000!值太大,肯定会溢出,可以考虑转换成字符串存贮,效率低。
*
* 参考:《编程之美》
*
* 每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。
* N!能产生0的质数组合只能是2 * 5,也就是说当对N!进行质数分解之后,
* N!末尾0的个位M取决于2的个数X和5的个数Y的最小值,即M = min(X,Y)。
* 又因为能被2整除的数出现的频率比能被5整除的数高得多,且出现一个5的时,
* 最少会同时出现一个2,所以M = Y。即得出Y的值就可以得到N!末尾0的个数。
* 计算Y,最直接的方法,就是计算机1…N的因式分解中5的个数,然后求和。
*/
/**
* @author kerner
*
*/
public class CompositeNumber {
public static final long NUM =1000;
public static void main(String[] args) {
int count = 0;
int compositeNumber ;
for(int i = 1; i <= NUM; i++){
compositeNumber = i;
while(compositeNumber % 5 == 0){ //分解合数,短除法
compositeNumber /= 5;
count++;
}
}
System.out.println("1000!="+count);
}
}
复制代码
作者:
kerner
时间:
2014-11-22 09:29
本帖最后由 kerner 于 2014-11-22 17:27 编辑
传送门--质因数分解
修改:
怎么贴不了链接呢???
http://baike.baidu.com/view/832102.htm?from_id=10305400&type=syn&fromtitle=%E8%B4%A8%E5%9B%A0%E6%95%B0%E5%88%86%E8%A7%A3&fr=aladdin
作者:
cczheng
时间:
2014-11-22 09:51
这题很常见,楼上都是正解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2