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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 EYE_SEE_YOU 于 2013-8-5 13:30 编辑

我先把书上的答案发出来:
public class test
{
        public static void main(String[]args)
        {            
                long limit =20;
                long factorial=1;
                for(int i =1;i<=limit;i++)
                {
                        factorial=1;
                        for(int factor=2;factor<=i;factor++)
                        {
                                factorial*=factor;
                        }
                                System.out.println(i+"!"+"is"+factorial);
                }
               
        }
}

喏,就是这个代码让我看不懂,下面这个是我自己理解出来的,运行结果是相同的:

public class test
{
        public static void main(String[]args)
        {            
                long limit=20;
                long factorial=1;
                for(int i=1;i<=limit;i++)
                {
                        int factor=1;
                        for(factorial=1;factor<=i;factor++)
                        {
                                factorial*=factor;
                        }
                        System.out.println(i+"! is "+factorial);

                }
               
        }
}
好了,那么第一个代码要怎么解读呢,完全弄不懂它的思维啊

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

6 个回复

倒序浏览
那个啥,代码我是能看懂,就是他写着代码的思路自己不能领悟,他怎么能弄出个2来
回复 使用道具 举报
public class test
{
        public static void main(String[]args)
        {            
                long limit =20;
                long factorial=1;
                for(int i =1;i<=limit;i++)
                {
                        factorial*=i;     
                        System.out.println(i+"!"+"is"+factorial);
                }

        }
}

你的书上怎么会那样写,变麻烦了不是。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
EYE_SEE_YOU 发表于 2013-8-4 13:52
那个啥,代码我是能看懂,就是他写着代码的思路自己不能领悟,他怎么能弄出个2来 ...

从1开始和从2开始是一样的,就是少了一次乘1运算
回复 使用道具 举报
本帖最后由 binghaiwang 于 2013-8-4 14:48 编辑
  1.        for(int factor=2;factor<=i;factor++)
  2.                         {
  3.                                 factorial*=factor;
  4.                         }
复制代码
他这里的为什么写2  是因为  1的阶乘是1 ,所以他在循环里边就少算了1的阶乘运算,并且1乘以所有数字都是数字本身,所以factorial*=factor运算里边也不需要重复去乘以1了

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
  1. long limit=20;
  2. long factorial=1;
  3. for(int i=1;i<=limit;i++)
  4.     {
  5.          
  6.          factorial = 1;
  7.           for(int factor=2;factor<=i;factor++)
  8.           {
  9.                   factorial*=factor;
  10.           }
  11.            System.out.println(i+"! is "+factorial);
  12.     }
复制代码
这是一个嵌套for循环,第一次循环,内循环factor<=i条件不满足,不用执行循环体。说白了就是少循环一次,你的代码也挺好的。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
原来是这样啊,直接省略乘1的运算,我会再研究研究这个方法的,谢谢上面哥儿几个啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马