A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒲公英在飞 中级黑马   /  2014-7-26 06:56  /  1101 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么求1000!的结果又多少个0?

8 个回复

倒序浏览
请把题目说详细一点
回复 使用道具 举报
排列组合?
回复 使用道具 举报
用用到大整数。
  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. }
复制代码



回复 使用道具 举报
public static void getZero1(int num){
                                int count = 0;
                                while(num>0){
                                        num = num/5;
                                        count += num;
                                }
                                System.out.println(count);
                        }

这个方法返回num!的末尾0的个数。
回复 使用道具 举报
凡是5或者5的倍数会产生一个0;25的倍数产生两个0;125的倍数产生3个0;625的倍数产生4个0,LZ知道规律了吧。。
回复 使用道具 举报

这个程序 写得好。结果是对的。就是看的不太懂,有注释就更好了
回复 使用道具 举报
渴望学习 发表于 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:13
我觉得这个应该很容易看懂啊,去查查大整数的api就知道我写的是啥了。

嗯。 多谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马