程式設計完數 C語言程式設計例項42

2021-10-12 21:44:46 字數 1373 閱讀 999

問題描述求某一範圍內完數的個數。

如果乙個數等於它的因子之和,則稱該數為「完數」(或「完全數」)。例如,6的因子為1、2、3,而 6=1+2+3,因此6是「完數」。

根據完數的定義,解決本題的關鍵是計算出所選取的整數i(i的取值範圍不固定)的因子(因子就是所有可以整除這個數的數),將各因子累加到變數s (記錄所有因子之和),若s等於i,則可確認i為完數,反之則不是完數。

對於這類求某一範圍(由於本題範圍不固定,在程式設計過程中採用鍵盤輸入的方式)內滿足條件的數時,一般釆用遍歷的方式,對給定範圍內的數值乙個乙個地去判斷是否滿足條件,這一過程可利用迴圈來實現。

本題的關鍵是求出選取數值i的因子,即從1到i-1範圍內能整除i的數,看某乙個數j是否為i的因子,可利用語句if(i%j==0)進行判斷,求某乙個數的所有因子,需要在1到i-1範圍內進行遍歷,同樣釆用迴圈實現。因此,本題從整體上看可利用兩層迴圈來實現。外層迴圈控制該數的範圍2〜n;內層迴圈j控制除數的範圍為1〜i,通過i對j取餘,是否等於0,找到該數的各個因子。

另外應注意每次判斷下乙個選定數之前,必須將變數s的值重新置為0,程式設計過程中一定要注意變數s重新置0的位置。

程式流程圖:

下面是完整的**:

#includeint main()        if(s == i)  /*判斷因子這和是否和原數相等*/            printf("it's a perfect number:%d\n", i);    }    return 0;}
執行結果:

請輸入所選範圍上限:10000↙︎

it's a perfect number:6

it's a perfect number:28

it's a perfect number:496

it's a perfect number:8128

上述程式中求某數的因子時,釆用從1到i-1範圍內進行遍歷的方法,乙個數乙個數地去試。這種方法可以做到沒有遺漏,但是效率不高。對於某一整數來說,其最大因子為n/2 (若n為偶數時,若為奇數最大因子小於n/2),在n/2〜n-1範圍內沒有資料可以整除此數。據此,我們可以把遍歷範圍縮小至1〜n-1,這樣程式效率可以提高一倍。相應程式如下:

#include>int main()    //...    }}
掃碼關注我,手把手帶你擼**

右下方的「在看

1000以內完數c語言程式 C語言完數程式設計題目詳解

首先看一下完數的概念 完數,即完美數,乙個數如果恰好等於除它本身外的因子之和,這個數就稱為完數。例如6 1 2 3.6的因子是1,2,3 題目概要 請寫乙個c語言程式,要求輸入乙個數字n輸出從1 n範圍內的所有完數,如果有則輸出1 n範圍內的所有完數。如果沒有,則輸出no!解題思路 用乙個雙重for...

C語言程式設計入門 第6周程式設計練習 2 完數

完數 5分 題目內容 乙個正整數的因子是所有可以整除它的正整數。而乙個數如果恰好等於除它本身外的因子之和,這個數就稱為完數。例如6 1 2 3 6的因子是1,2,3 輸入格式 兩個正整數,以空格分隔。輸出格式 其間所有的完數,以空格分隔,最後乙個數字後面沒有空格。如果沒有,則輸出一行文字 nil 輸...

C語言程式設計例項

c語言三個數從小到大排序 輸出 c語言猴子吃桃問題 c語言百錢買百雞 百錢百雞,百雞問題 c語言漁夫打魚曬網問題 c語言希爾排序演算法 c語言氣泡排序演算法 c語言直接插入排序演算法 c語言快速排序演算法 c語言選擇排序演算法 c語言歸併排序演算法 c語言二分查詢演算法,折半查詢演算法 c語言分塊查...