C语言判断完数(完整版)

学习 专栏收录该内容
11 篇文章 0 订阅

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,和循环条件用到的i
    printf("请输入需要判断的数:");
    scanf("%d",&n);//存放需要判断的数n
    for(i=1;i<n;i++)//循环条件找出因子并累加
    {
        if(n%i==0)
            sum+=i;
    }
    if(n==sum)
        printf("%d 是完数\n",n);
    else
        printf("%d 不是完数\n",n);
    return 0;
}

 

类型二:判断多个完数

判断多个完数其实和判断一个完数是一样的,就是增加了一个循环的功能,给了循环体一个范围,让它在循环范围中判断这些数是否为完数。

运用知识点:循环结构,选择结构

#include "stdio.h"
int main()
{
	int n=2,i,sum;//定义一个存放因子和的变量,以及需要循环判断的起始数n,和循环条件用到的i
	while(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);
		else
		    printf("%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)//如果符合完数条件,返回1
        return 1; 
    else //如果不是完数,返回0
        return 0;
}
int main()
{
    int n;
	printf("请输入需要判断的数:");
    scanf("%d",&n);//输入n值
    if(isPerfectNum(n))//判断是否为完数,并输出结果。
        printf("%d 是完数\n",n);
    else
        printf("%d 不是完数\n", n);
    return 0;
}

 

类型四:用调用函数的方式来判断多个完数

方法其实结合类型二和类型三就可以得到,这里就不放代码了,给你们留下自己学习的空间。

 

 

 

 

本博客由个人学习过程中遇到的问题经过自己总结,并加上搜索的内容结合起来写出来的。欢迎大家浏览,毕竟我也是个C语言的初学者,有所不到之处欢迎大佬指点!

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值