查找完数(C语言)

首先来看完数的定义:一个数如果恰好等于它的因子之和,这个数就称为“完数”。

比如6=1+2+3.同时6也是最小的完数,所以在编写代码时保证有效查询,可以设置查询条件

比如28=1+2+4+7+14

通过最简单的循环语句代码就可以查询一定范围内的所有完数

其中num表示查询范围,sum表示因子的累加和

int main()
{
	int n = 2,num, i, sum;
	scanf("%d", &num);
	while (n != num)
	{
		n++, sum = 0;
		for (i = 1; i < n; i++)
		{
			if (n % i == 0)
				sum += i;
		}
		if (n == sum)
			printf("%d是完数\n", n);

	}
	return 0;
}

普通函数很容易就能实现,那我们还可以来定义一个函数来实现

比如定义一个bool类型的函数,循环判段一个数是不是函数,如果是则返回true,如果不是则返回false

然后通过主函数从键盘获取要查询的范围,调用刚刚定义的bool IsperfectNum(int num),就能实现指定范围内完数的查询了

bool IsperfectNum(int num)
{
	//assert(num >= 6);//如果要使用assert,则需要在头文件中添加#include <cassert>
	int i,sum = 0;
	bool flag;
	for (i = 1; i < num; i++)
	{
		if (num % i == 0)
			sum += i;
		if (sum == num)
			flag = true;
		else
			flag = false;
	}
	return flag;
}
int main()
{
	int n = 2, num, sum;
	printf("请输入要查询的范围\n");
	scanf("%d", &num);
	if (num < 6)
	{
		printf("输入范围有误,最小的完数是6");
	}
	while (n != num)
	{
		n++, sum = 0;
		bool res = IsperfectNum(n);
		if (res == true)
			printf("%d是完数\n", n);
		
	}
	return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值