| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1987 人关注过本帖
标题:编完了个代码,大家给看看,还能不能精简
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用luckhide在2016-3-24 12:22:59的发言:

这样行吗?不懂能除尽2、3、5的要返回2、3、5,再说返回的2、3、5不是等同于true吗?

返回的是邏輯値true,不是返回2、3、5數値。這3個特殊數値是後面循環邏輯中會漏掉的素數,即後面的循環會把它們判斷爲false,那是不行的。

授人以渔,不授人以鱼。
2016-03-24 12:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你的代碼,把數據從頭到尾全檢擦一遍,是沒錯的,衹是效率低了,但提高效率的代碼,必定是比原來這種不精簡的。高效的代碼,代碼量不會短,這是常規情形,能找到代碼既短又高效的方法,是那個程序員的運氣,天才不是也不該是仿效的榜樣。

授人以渔,不授人以鱼。
2016-03-24 12:34
luckhide
Rank: 5Rank: 5
来 自:青岛
等 级:职业侠客
帖 子:51
专家分:338
注 册:2016-3-19
收藏
得分:0 
回复 11楼 TonyDeng
漏看一个等于号,是关系运算。
2016-03-24 12:36
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
程序代码:
        bool IsPrime2(unsigned short n)
    {
        if (n % 2 == 0)
        {
            return n == 2;
        }
        if (n % 3 == 0)
        {
            return n == 3;
        }
        if (n % 5 == 0)
        {
            return n == 5;
        }
        int b=4;
        for (unsigned short i = 7; i * i <= n; i += b)
        {
            if (n % i == 0)
            {
                return false;
            }
            b^=6;
        }

        return true;
    }

T版主好啊,

[此贴子已经被作者于2016-3-24 12:43编辑过]


剑栈风樯各苦辛,别时冰雪到时春
2016-03-24 12:42
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 8楼 TonyDeng
for循环里的i为什么从7开始,从2开始可以吗?
还有为什么return n==2;
直接return true;不可以吗

[此贴子已经被作者于2016-3-24 12:48编辑过]

2016-03-24 12:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用屋顶在2016-3-24 12:42:27的发言:

for循环里的i为什么从7开始,从2开始可以吗

因爲7之前的都已經判斷過了,2、4、6不是素數,默認返回假。

授人以渔,不授人以鱼。
2016-03-24 12:47
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 16楼 TonyDeng
那49之前的整数是不是素数怎么判断呢,
2016-03-24 13:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
for (int i = 2; i <= 49; ++i)
{
    if (IsPrime(i))
    {
        printf("%d\n", i);
    }
}

授人以渔,不授人以鱼。
2016-03-24 13:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把判斷一個整數是不是素數的功能提煉成函數,是要把代碼邏輯清晰化,目的就是要寫出如18樓那樣用法,它的邏輯很明顯,不用寫註釋就明白,但若你把函數中的代碼嵌入到其中,就很難讀了。另一方面,這樣的函數是可重用的,以後不用再寫,程序員的天性,寫是爲了不寫。另一方面,這個的函數也是可維護的,衹要你有更好的判斷素數方法,修改這個函數即可,而18樓的使用代碼,完全不用改動——根本目的就是爲了這個。

授人以渔,不授人以鱼。
2016-03-24 13:11
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 19楼 TonyDeng
不是很明白8楼你给的那个函数,为什么4和6不加进去?如果能被4和6整除,一定能被2整除是吗?所以不用判定能不能被4和6整除

[此贴子已经被作者于2016-3-24 13:19编辑过]

2016-03-24 13:15
快速回复:编完了个代码,大家给看看,还能不能精简
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017180 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved