黑马程序员技术交流社区

标题: 怎么求1000!的结果又多少个0? [打印本页]

作者: 蒲公英在飞    时间: 2014-7-26 06:56
标题: 怎么求1000!的结果又多少个0?
怎么求1000!的结果又多少个0?
作者: rolling-stone    时间: 2014-7-26 07:08
请把题目说详细一点
作者: 孤守星空    时间: 2014-7-26 07:20
排列组合?
作者: 黎志勇    时间: 2014-7-26 07:33
用用到大整数。
  1. package test;

  2. import java.math.BigInteger;

  3. public class Test8 {
  4.         public static void main(String[] args) {
  5.                 getZero(1000);
  6.         }

  7.         public static void getZero(int num) {
  8.                 BigInteger bigInteger = BigInteger.valueOf(1);
  9.                 for (int i = 1; i <= num; i++) {
  10.                         bigInteger = bigInteger.multiply(BigInteger.valueOf(i));
  11.                 }
  12.                 char[] chars = bigInteger.toString().toCharArray();
  13.                 int count = 0;
  14.                 for (int i = 0; i < chars.length; i++) {
  15.                         if(chars[i]=='0') {
  16.                                 count++;
  17.                         }
  18.                 }
  19.                 System.out.println(num+"! 含有 "+count+" 个0");
  20.         }
  21. }
复制代码




作者: 为爱编程    时间: 2014-7-26 09:19
public static void getZero1(int num){
                                int count = 0;
                                while(num>0){
                                        num = num/5;
                                        count += num;
                                }
                                System.out.println(count);
                        }

这个方法返回num!的末尾0的个数。
作者: star5603    时间: 2014-7-26 09:45
凡是5或者5的倍数会产生一个0;25的倍数产生两个0;125的倍数产生3个0;625的倍数产生4个0,LZ知道规律了吧。。
作者: 渴望学习    时间: 2014-7-26 10:51
黎志勇 发表于 2014-7-26 07:33
用用到大整数。

这个程序 写得好。结果是对的。就是看的不太懂,有注释就更好了
作者: 黎志勇    时间: 2014-7-26 11:13
渴望学习 发表于 2014-7-26 10:51
这个程序 写得好。结果是对的。就是看的不太懂,有注释就更好了

我觉得这个应该很容易看懂啊,去查查大整数的api就知道我写的是啥了。
  1. package test;

  2. import java.math.BigInteger;

  3. public class Test8 {
  4.         public static void main(String[] args) {
  5.                 getZero(10);
  6.         }

  7.         public static void getZero(int num) {
  8.                 //因为1000!的阶乘非常大,需要使用大整数BigInteger类
  9.                 //N! 1*2*3*……*(N-1)*N,所以把结果的初始化为1
  10.                 BigInteger bigInteger = BigInteger.valueOf(1);
  11.                 for (int i = 1; i <= num; i++) {
  12.                         //multiply()是大整数的乘法操作
  13.                         bigInteger = bigInteger.multiply(BigInteger.valueOf(i));//阶乘
  14.                 }
  15.                 char[] chars = bigInteger.toString().toCharArray();//把计算结果转成字符串,再转成字符数组
  16.                 int count = 0;//初始化计数
  17.                 for (int i = 0; i < chars.length; i++) {
  18.                         if(chars[i]=='0') {//比较每个字符,若为字符'0',计数加1
  19.                                 count++;
  20.                         }
  21.                 }
  22.                 System.out.println(num+"! 含有 "+count+" 个0");//打印结果
  23.         }
  24. }
复制代码

作者: 渴望学习    时间: 2014-7-26 11:21
黎志勇 发表于 2014-7-26 11:13
我觉得这个应该很容易看懂啊,去查查大整数的api就知道我写的是啥了。

嗯。 多谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2