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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李辉-湖北 于 2013-12-24 21:14 编辑

求1000!的结果中包含多少个0  注意:不是结果末尾有多少个连续的0,是问结果里面总共有多少个0
1000! = 1×2×3×4×5×...×999×1000
  1. public class jiecheng
  2. {

  3.         public static void main(String[] args)
  4.         {
  5.                 int zhi = 1, num = 0;

  6.                 for(int i = 1; i <= 1000; i++)
  7.                 {
  8.                         zhi *= i;//计算出  1000! 的最后结果
  9.                 }
  10.                 String str = String.valueOf(zhi); // 把  1000! 的计算结果转换为字符串赋给str

  11.                 System.out.println(str);         //输出str这个字符串
  12.                
  13.                 for(int j = 0; j < str.length(); j++) //length方法,循环取出str里面的每个字符
  14.                 {
  15.                    if(str.charAt(j) == '0')//charAt方法,把从str里取出的每个字符和字符'0'进行比较

  16.                    num++;                  //若str里面有字符和字符'0'匹配,则执行num++
  17.                 }
  18.                 System.out.println("1000!里面包含'0'的个数为: "+num);//输出num(包含0的个数)
  19.                
  20.         }

  21. }
复制代码

我个人觉得这代码思路也是对的啊,把第一个for循环里面的 i <= 1000 改为像8、9、10、11、12这些小点的数值结果就是正常的

但是改成 1000 的话程序运行的结果就不对了,哪位大神帮小弟看看哪里还需要改动的,不胜感激啊!

今晚是平安夜,祝版主和大家平安快乐,身体健康,生活愉快啊!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

9 个回复

倒序浏览
1000!已经超出int的最大范围了
回复 使用道具 举报
int 占四个字节,也就是4个8位,最大值是2的32次方减一,而1000!的值明显已经超出了int的范围,不止是int,long也不行
回复 使用道具 举报
1000!超出了int的取值范围,会溢出,肯定要出问题的换成double的试试
回复 使用道具 举报
哥们,别说int,就是long,double也装不下1000!的结果啊。。。我写了一个可以参考一下。若发现不足之处还望指点,大家共同学习。{:soso_e113:}
  1. import java.math.*;

  2. /*
  3. 1000! 的运算结果早已超出基本数据类型的长度,所以在接受运算结果是不能使用基本数据类型。
  4. */

  5. class JieChengDemo
  6. {
  7.         //求指定数值的阶乘
  8.         public BigInteger qiuJieCheng(int num)
  9.         {
  10.                 BigInteger biginteger = new BigInteger("1");
  11.                 for(int x = 1; x <= num; x++)
  12.                 {
  13.                         biginteger = biginteger.multiply(new BigInteger(x+""));
  14.                 }
  15.                 System.out.println(num+"!的运算结果:"+"\r\n"+biginteger);
  16.                 return biginteger;
  17.         }
  18.        

  19.         public static void main(String[] args)
  20.         {
  21.                 //求阶乘结果中”0“的个数
  22.                 JieChengDemo jcd = new JieChengDemo();
  23.                 char[] numChar = jcd.qiuJieCheng(100).toString().toCharArray();
  24.                 int count = 0;
  25.                 for(int x = 0; x < numChar.length; x++)
  26.                 {
  27.                         if('0' == numChar[x])
  28.                         {
  29.                                 count += 1;
  30.                         }
  31.                 }
  32.                 System.out.println("结果中包含\"0\"的个数为: "+count);
  33.         }
  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 1 0
高波 发表于 2013-12-24 19:53
哥们,别说int,就是long,double也装不下1000!的结果啊。。。我写了一个可以参考一下。若发现不足之处还 ...

char[] numChar = jcd.qiuJieCheng(100).toString().toCharArray();

把这里的100改成1000就可以是吧?结果是472个。太感谢你啦!祝你平安夜、圣诞节快乐啊!!!
回复 使用道具 举报
次长风 发表于 2013-12-24 19:03
1000!超出了int的取值范围,会溢出,肯定要出问题的换成double的试试

啊,这么简单知识我怎么忘了!唉,还是谢谢你啊,祝你平安夜、圣诞节快乐!!
回复 使用道具 举报
just_nnnnx 发表于 2013-12-24 18:55
int 占四个字节,也就是4个8位,最大值是2的32次方减一,而1000!的值明显已经超出了int的范围,不止是int ...

谢谢你的提醒,祝你平安夜、圣诞节快乐啊!!!
回复 使用道具 举报
xplcc 发表于 2013-12-24 18:50
1000!已经超出int的最大范围了

谢谢你的提醒啊,,,祝你平安夜、圣诞节快乐!!!
回复 使用道具 举报
高波 中级黑马 2013-12-24 21:13:56
10#
李辉-湖北 发表于 2013-12-24 21:02
char[] numChar = jcd.qiuJieCheng(100).toString().toCharArray();

把这里的100改成1000就可以是吧?结 ...

是的,测试完忘改回来了,哈哈,大家同乐同乐
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马