C语言判断完数(完整版)
C語言判斷完數(完整版)
原創:丶無殤? ? ? ?? ? ? ?2018-12-15
簡介:
大二了,作為大一新生的學長的我,總會有小迷妹小迷弟…(咳咳…小學妹小學弟)來問我問題,其中一類題目就是關于如何判斷完數的。那么什么叫完數??
完數定義:
完數就是:它所有的真因子(即除了自身以外的約數)的和(即因子函數),恰好等于它本身。如果一個數恰好等于它的因子之和,則稱該數為“完全數”。第一個完全數是6,第二個完全數是28,第三個完全數是496,后面的完全數還有8128、33550336等等。
例如:
6→1,2,3
28→1,2,4,7,14
判斷方法:
判斷完數首先要知道怎么判斷,前面說了定義,現在只要知道怎么把完數的因子求出來。
假設一個數為n,我們可以用循環條件,讓n分別和1,2,3,4,5……n-1進行判斷是否能被整除,我們可以通過取余(%)的方法來進行判斷。如果判斷出來取余結果為0,那么就把這些因子全部加起來,得到因子的和。
接下來,將因子的和與n進行比較,如果相等,那么就是完數,反之不是完數。
?
類型一:判斷一個完數
判斷一個完數,就是運用基本輸入函數(scanf),將你要判斷的數據輸入進來,之后運用上面所說的循環條件來判斷。
這里運用到的知識點:循環結構,選擇結構
#include "stdio.h" int main() {int n,i,sum=0;//定義一個存放因子和的變量,以及需要判斷的數n,和循環條件用到的iprintf("請輸入需要判斷的數:");scanf("%d",&n);//存放需要判斷的數nfor(i=1;i<n;i++)//循環條件找出因子并累加{if(n%i==0)sum+=i;}if(n==sum)printf("%d 是完數\n",n);elseprintf("%d 不是完數\n",n);return 0; }?
類型二:判斷多個完數
判斷多個完數其實和判斷一個完數是一樣的,就是增加了一個循環的功能,給了循環體一個范圍,讓它在循環范圍中判斷這些數是否為完數。
運用知識點:循環結構,選擇結構
#include "stdio.h" int main() {int n=2,i,sum;//定義一個存放因子和的變量,以及需要循環判斷的起始數n,和循環條件用到的iwhile(n!=100)//此循環中的2~100就是循環的內容,{n++,sum=0;//每次n增加1,并將sum清零for(i=1;i<n;i++)//循環條件找出因子并累加{if(n%i==0)sum+=i;}if(n==sum)printf("%d 是完數\t",n);elseprintf("%d 不是完數\t",n);}return 0; }?
類型三:用調用函數的方式來判斷單個完數
用調用函數的方法只是讓主函數中的步驟減少,使程序運行速度加快。
調用函數來判斷是否為完數(完美數),定義了一個isPerfectNum()函數,通過返回值來判斷是否為完數,返回1則為是,返回0則為否。
運用知識點:自定義函數,選擇結構,循環結構
#include <stdio.h> int isPerfectNum(int n)//判斷n是否為完數,如果是,則返回1,否則返回0 {int i,s=0;for(i=1;i<n;i++)//遍歷小于n的整數if(n%i==0)//可以整除,為真因子s+=i;//累加每個真因子到s上 if(s==n)//如果符合完數條件,返回1return 1; else //如果不是完數,返回0return 0; } int main() {int n;printf("請輸入需要判斷的數:");scanf("%d",&n);//輸入n值if(isPerfectNum(n))//判斷是否為完數,并輸出結果。printf("%d 是完數\n",n);elseprintf("%d 不是完數\n", n);return 0; }?
類型四:用調用函數的方式來判斷多個完數
方法其實結合類型二和類型三就可以得到,這里就不放代碼了,給你們留下自己學習的空間。
?
?
?
?
本博客由個人學習過程中遇到的問題經過自己總結,并加上搜索的內容結合起來寫出來的。歡迎大家瀏覽,畢竟我也是個C語言的初學者,有所不到之處歡迎大佬指點!
總結
以上是生活随笔為你收集整理的C语言判断完数(完整版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker-machine创建虚机时停
- 下一篇: React开发(264):react使用