首先来看完数的定义:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
比如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;
}
|