1、解题思路:虚掘所谓完数是一些特嫌兄殊的自然数。如果一个数恰好等于它的因子之和,则称该数为“完全数”。先定义一个函数用于判断一个数是否是完数,接着依次从2到5000依次循环判断。
2、参考代码:
#include <stdio.h>int fun(int n){//判断n是否是完数
int i,sum=0
for(i=1i<ni++)
if(n%i==0) sum+=i
if(sum==i) return 1
return 0
}
int main ()
{
int i
for(i=2i<5000i++)
差者核 if(fun(i))
printf("%d ",i)
return 0
}
3、运行结果:6 28 496
完数,即完全数(Perfect number),又称完美数或羡坦物完备数,是一些特殊的自然数。其所有的真因子(即除了信宴自身以外的约数)的和(即因子函数),恰好等于本身。根据该定义 可以得出判断完数的函数如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0
for(i = 1i <=n/2i ++)
if(n%i == 0) s+= i//兄液统计所有真因子的和。
if(s == n) return 1//如果与原值相等,则该数为完数。
return 0//不是完数。
}
根据该函数,只需要对需要打印的范围内1 ~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完整代码如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0
for(i = 1i <=n/2i ++)
if(n%i == 0) s+= i//统计所有真因子的和。
if(s == n) return 1//如果与原值相等,则该数为完数。
return 0//不是完数。
}
int main()
{
int n
for(n = 1n <1000n++)
if(is_perfect_number(n)) printf("%d,",n)
}
改好了,看注释拆迅#include<stdio.h>
int main ()
{
int a = 1, i = 1, b = 0
while (a <= 1000)
{
while (i <a) //不应坦脊该包括a本身
{
if (a % i == 0)
b += i//多了++
i++
}
if (b == a)
{
printf ("%d its factors are ", a)
i = 1
while (i <a) //不应该包括a本旅信此身
{
if (a % i == 0)
printf ("%d,", i) //斜杠是干什么用的?多了++
i++
}
printf("\n")//加个换行
}
a++
b = 0
i = 1
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)