創作內容

8 GP

質因數分解程式

作者:藍貓│2013-11-03 21:15:45│巴幣:1,014│人氣:2266
#include<stdlib.h>
#include<stdio.h>

int main(void)
{
    int run = 1;
    while (run != 0)
    {
        int number;
        printf("\n\n請輸入想計算的數:");
        scanf("%d", &number);
    
        while (number < 0 )
        {
            printf("\n\n輸入值不能為負數,請重新輸入:");
            scanf("%d", &number);
        }
        
        printf("質因數分解的結果為:");
        if (number == 0 || number == 1)
        {
            printf("%d", number);
        }
    
        int pow = 0;
        for (int factor = 3; number > 1; factor += 2)
        {
            if (factor == 3)
            {
                while (number % 2 == 0)
                {
                    pow++;
                    number = number / 2;
                }
                if (pow > 0)
                {
                    printf("%d",2);
                    printf("^");
                    printf("%d", pow);
                    if (number > 1)
                        printf("*");
                }
            }
            

            pow = 0;
            while (number % factor == 0)
            {
                pow++;
                number = number / factor;
            }
            if (pow > 0)
            {
                printf("%d",factor);
                printf("^");
                printf("%d", pow);
                if (number > 1)
                    printf("*");
            }
        }
        
        printf("\n\n請決定是否繼續,繼續請按任意數,不想的話請按 0 :");
        scanf("%d", &run);
    }  
    
    return 0;
}
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2230841
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 4 篇留言

讓我踩死你
是vb嗎?

11-03 21:18

藍貓
C語言11-03 21:19
都可以
行數越少管理越方便:
printf("%d",factor);
printf("^");
printf("%d", pow);
printf("%d^%d",factor, pow);//寫成像這樣一行比較好

int pow = 0;
int number;//宣告盡量還是最上面比較好,養成這習慣以後寫長篇程式會比好管理

pow = 0;
while (number % factor == 0)
{
pow++;
number = number / factor;
}這程式有點太長了可以縮減成
for(pow=0;number % factor == 0;pow++)
number = number / factor;

printf("\n\n請輸入想計算的數:");
scanf("%d", &number);

while (number < 0 )
{
printf("\n\n輸入值不能為負數,請重新輸入:");
scanf("%d", &number);
}
等於下方這寫法
do
{
printf("\n\n輸入值不能為負數,請重新輸入:");
scanf("%d", &number);
} while (number < 0 ) ;

11-03 23:11

藍貓
嗯,你這倒是讓我注意了一些本來還沒思考到的問題,不過這段程式碼我是準備搬到函數重組的部份講的,迴圈部份如你說的,我的確有必要把它改成for,這段程式碼修改成for迴圈之後易讀性會增強,這是我比較少注意到的點,知道一些重組手法以後,反而忘了基本的運用原則。

另外在有些情況下,變數我習慣放在需要使用的時後再宣告,原因很簡單,方便我抓出該段的暫時變數,有的時後這些暫時變數所在的區段,可以形成新函數的區域變數或回傳值。

至於下面你那一段,有取捨的味道,某種程度上可以直接以一個迴圈代替,但是不完全只靠這麼做就完全取代,或許它還要再加一個判斷式,事實上這一段的寫法還是看需求,是否需要讓程式具備某些靈活性的需求,如果不需要,簡單的一個迴圈應該就夠了。11-04 08:14
藍貓
其實寫出這一段程式的後續就是,當作之後的文章範例,主要是拿來講解函數簡化的問題跟其它議題,所以這段程式碼的出生其實是為了方便我做某些整理的案例教學,也感謝你提醒我for迴圈還有開頭那一段的部份。11-04 08:20
都可以
我剛貼的開發環境的自動空格不見了0.0

11-03 23:55

藍貓
謝謝你的建議,也希望以後不吝指教^^11-04 21:35
シッコク
這只能分解出2和3嗎

11-04 21:57

藍貓
所有數都可以11-04 22:00
藍貓
當然不包含超過8位數的數,因為這裡沒有去實作溢位偵測。11-04 22:01
我要留言提醒:您尚未登入,請先登入再留言

8喜歡★ertyk122 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:常見的程式錯誤... 後一篇:獎勵和員工的表現成正比?...

追蹤私訊切換新版閱覽

作品資料夾

小說連載 (0)
英雄聯盟小說(英雄聯盟系列) (19)
[外傳]昏黃歲月(英雄聯盟系列) (1)
阿宅與美女代打(英雄聯盟系列) (0)
[寫實小說]_糾心恥笑園 (0)
[寫實小說]_倒數末日 (0)
[寫實小說]_憂鬱天堂 (2)
[寫實小說]_網路殺人魔 (0)
[寫實小說]_錢魔 (0)
[神幻小說]_犬族的命運 (59)
[神幻小說]_捨不得你。妄想 (0)
國中生小說 (3)

漫畫連載 (0)
[搞笑四格]_場外舉人 (0)
[少年漫畫]_台北大地震 (0)
[少年漫畫]_就是愛運動 (0)
[少年漫畫]_餵愛一口香 (0)
[寫實漫畫]_白狼 (0)
[寫實漫畫]_天刑三二三 (0)
[寫實漫畫]_橫血英雄 (0)
[寫實漫畫]_恐龍妹 (0)
[神幻漫畫]_剩水童子 (0)
[神幻漫畫]_永遠的父女 (0)
[神幻漫畫]_勇者我家人 (0)
[其它]_音魂 (1)

劇本創作 (0)
[寫實劇本]_白狼 (1)
[寫實劇本]_天刑三二三 (0)
[神幻劇本]_繪魔 (0)
[神幻劇本]_魔曲 (0)

電腦理論 (6)
程式設計相關理論 (14)
高階程式語言理論 (6)
實作程式 (15)
程序之相關問題 (0)
硬體管理與計算機結構 (3)

創作理論 (3)
文學理論 (3)
文學實作要領 (0)
繪畫理論 (1)

生活日記 (241)
自我提醒 (5)

文創作品 (2)
散文與詩 (25)
故事大綱 (1)
繪圖 (57)
processing文創應用 (0)
勇造創作 (3)

數學領域相關證明 (0)

英雄聯盟豪洨文 (3)

辯論大會 (0)

未分類 (22)

n4vul3
電 MAN看更多我要大聲說昨天14:51


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】