黑马程序员技术交流社区

标题: 一个简单的乘法赋值运算 [打印本页]

作者: shamoman    时间: 2015-4-9 13:01
标题: 一个简单的乘法赋值运算
在做一个基础测试题的时候遇到点小麻烦,编写程序实现: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 运算?



作者: shamoman    时间: 2015-4-9 13:12
写了个简单的程序:
  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
比较疑惑啊!
作者: fantacyleo    时间: 2015-4-9 13:19
显然是溢出啦,int表示不了那么大的数。要么用BigDecimal类,要么参考我的帖子http://bbs.itheima.com/thread-133474-1-1.html
作者: shamoman    时间: 2015-4-9 13:19
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
作者: shamoman    时间: 2015-4-9 13:34
用double 后最后输出是:  Infinity:Q
作者: shamoman    时间: 2015-4-9 13:45
通过搜索,看来只能用BigInteger 定义一个可以容纳结果的数了。:D
作者: shamoman    时间: 2015-4-9 13:46
fantacyleo 发表于 2015-4-9 13:19
显然是溢出啦,int表示不了那么大的数。要么用BigDecimal类,要么参考我的帖子http://bbs.itheima.com/thre ...

:handshake,才看到,谢谢




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