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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shamoman 中级黑马   /  2015-4-9 13:01  /  669 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在做一个基础测试题的时候遇到点小麻烦,编写程序实现:1000! = 1×2×3×4×5×...×999×1000

我用的代码是:
  1. class Test9
  2. {
  3.         public static void main(String[] args)
  4.         {

  5.                 int sum=1;
  6.                 for(int i=1;i<=1000;i++)
  7.                 {
  8.                        
  9.                         sum = sum*i;
  10.                         //sum*=i;
  11.                         System.out.println(sum);

  12.                 }
  13.                 System.out.println(sum);
  14.                 String str = Integer.toString(sum);
  15.                 int count=0;
  16.                 for(int i=0;i<str.length();i++)
  17.                 {
  18.                         if(str.charAt(i)=='0')
  19.                                 count++;
  20. }
  21.                 System.out.println(sum+"中有0的个数为:"+count);
  22.         }
  23. }
复制代码
输出结果为:
sum循环输出1000个0;
最后 0中有0的个数为:1
当在for循环中的不对sum进行赋值时,直接在输出时计算sum*i的值:
  1. class Test9
  2. {
  3.         public static void main(String[] args)
  4.         {

  5.                 int sum=1;
  6.                 int sumc=1;
  7.                 for(int i=1;i<=1000;i++)
  8.                 {
  9.                        
  10.                         //sum = sum*i;
  11.                         //sum*=i;
  12.                         System.out.println(sum*i);

  13.                 }
  14.                 System.out.println(sum);
  15.                 String str = Integer.toString(sum);
  16.                 int count=0;
  17.                 for(int i=0;i<str.length();i++)
  18.                 {
  19.                         if(str.charAt(i)=='0')
  20.                                 count++;
  21.                 }
  22.                
  23.                 System.out.println(sum+"中有0的个数为:"+count);
  24.         }
  25. }
复制代码

此时输出为:
1,2,3,.......1000;
最后结果 1中有0的个数为:0;
问题:循环中为什么不能进行sum=sum*i 运算?


6 个回复

倒序浏览
写了个简单的程序:
  1. class Test10
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int mul=1;
  6.                 for (int i=1;i<100 ;i++ )
  7.                 {
  8.                         mul=mul*i;
  9.                 }
  10.                 System.out.println(mul);
  11.         }
  12. }
复制代码

输出为:0
比较疑惑啊!
回复 使用道具 举报
显然是溢出啦,int表示不了那么大的数。要么用BigDecimal类,要么参考我的帖子http://bbs.itheima.com/thread-133474-1-1.html
回复 使用道具 举报 1 0
int型的数改成double型
  1. class Test10
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 double mul=1;
  6.                 for (int i=1;i<100 ;i++ )
  7.                 {
  8.                         mul=mul*i;
  9.                 }
  10.                 System.out.println(mul);
  11.         }
  12. }
复制代码

这样才能输出。。。。。。。。。。。。。。:Q
回复 使用道具 举报
用double 后最后输出是:  Infinity:Q
回复 使用道具 举报
通过搜索,看来只能用BigInteger 定义一个可以容纳结果的数了。:D
回复 使用道具 举报
fantacyleo 发表于 2015-4-9 13:19
显然是溢出啦,int表示不了那么大的数。要么用BigDecimal类,要么参考我的帖子http://bbs.itheima.com/thre ...

:handshake,才看到,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马