用C语言求1000以内的完数?

 我来答
风若远去何人留
推荐于2017-09-17 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450133
专业C/C++软件开发

向TA提问 私信TA
展开全部
完数,即完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。
根据该定义 可以得出判断完数的函数如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
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 = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。

return 0;//不是完数。
}

int main()
{
int n;
for(n = 1; n < 1000; n++)
if(is_perfect_number(n)) printf("%d,",n);
}
阴全穰辛
2020-01-19 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:31%
帮助的人:949万
展开全部
完数,即完全数(Perfect
number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。
根据该定义
可以得出判断完数的函数如下:
#include
int
is_perfect_number(int
n)
{
int
i,s=0;
for(i
=
1;
i
<=n/2;
i
++)
if(n%i
==
0)
s+=
i;//统计所有真因子的和。
if(s
==
n)
return
1;//如果与原值相等,则该数为完数。
return
0;//不是完数。
}
根据该函数,只需要对需要打印的范围内1
~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完整代码如下:
#include
int
is_perfect_number(int
n)
{
int
i,s=0;
for(i
=
1;
i
<=n/2;
i
++)
if(n%i
==
0)
s+=
i;//统计所有真因子的和。
if(s
==
n)
return
1;//如果与原值相等,则该数为完数。
return
0;//不是完数。
}
int
main()
{
int
n;
for(n
=
1;
n
<
1000;
n++)
if(is_perfect_number(n))
printf("%d,",n);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-09-21
展开全部
给:
#include <stdio.h>

int ws(int a,int b,int c)
{
int d;
if (a>c) {
if (a%c==0)
b+=c;
d=ws(a,b,c+1);
}
else if (c==a) {
if (b==a) {
return 1;
}
else return 0;
}
if (c==a-1&&d) {
printf("%d is Prefect number:\t",a);

}
if (d&&(a%c==0)) {
printf("%d ",c);
}
else if (!d) return 0;
if (c==1)
{putchar('\n');
return d;}

}
int main(void)
{
int i;

for (i=1; i<=1000; i++)
ws(i,0,1) ;
return 0;
}

运行结果为:
6 is Prefect number: 3 2 1
28 is Prefect number: 14 7 4 2 1
496 is Prefect number: 248 124 62 31 16 8 4 2 1
Press any key to continue
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我的视频乐园
2020-12-09 · TA获得超过117个赞
知道答主
回答量:127
采纳率:0%
帮助的人:25.3万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
波波罗克罗伊斯
2009-02-14 · TA获得超过2013个赞
知道大有可为答主
回答量:851
采纳率:0%
帮助的人:1153万
展开全部
6,28,496

#include<stdio.h>
void main()
{
int n,i,s;
for(n=2;n<=1000;n++)
{
s=0;
for(i=1;i<=n/2;i++)
if(n%i==0)
s+=i;
if(s==n)
printf("%d是完数!\n",n);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式