C语言判断完数(完整版)
原创:丶无殇-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语言的初学者,有所不到之处欢迎大佬指点!