用C语言:求完数 5

求完数Description一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出从n到m以内的所有完数。Input输入n和m正整数,n<=m... 求完数

Description

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出从n到m以内的所有完数。

Input

输入n和m正整数,n<=m,且都不超过10000,之间用空格分隔。

Output

输出从n到m以内的所有完数,之间用空格分隔,如果不存在完数则输出None 。

Sample Input

2 100
100 200

Sample Output

6 28
None

Hint

C 语言基础题。
展开
 我来答
呵半我1r
2012-05-06 · 超过10用户采纳过TA的回答
知道答主
回答量:17
采纳率:0%
帮助的人:23.4万
展开全部
//因为没有说明结束条件,所以暂且以范围为输入两个0为结束条件
#include<stdio.h>
int check(int low, int high);//打印low和high范围内的完数,并返回完数的个数
int test(int n);//检测n是否为完数,如果是,则打印它,并返回1,否则,返回0.
int main(){
int low, high;
int count;//count变量为low和high范围内的完数个数
scanf("%d%d", &low, &high);//输入范围
if(low>high || high>10000)//若不满足要求的条件,退出程序
return (1);
while(low!=0 || high!=0)//low和high均为0,则结束
{
count=check(low, high);//打印low和high之间的完数,并返回个数给count
if(count==0)//如果完数个数为0,则打印no
printf("no");
printf("\n");
scanf("%d%d", &low, &high);//重新输入范围low和high
}
return 0;
}
int check(int low, int high){
int t=0;//t为发现的完数个数
int n;
for(n=low;n<=high;n++)
{
if(test(n)==1)
t++;
}
return t;//返回完数个数
}
int test(int n)
{
int i;
int sum=0;//sum为因子之和
for(i=1;i<=n/2;i++)
if(n%i==0)
sum=sum+i;
if(sum==n)
{
printf("%d ", n);//若n为完数,则打印,并返回1
return 1;
}
else//否则,返回0
{
return 0;
}
}
希望对你有用~~
称时29
2012-05-04 · 超过34用户采纳过TA的回答
知道答主
回答量:76
采纳率:100%
帮助的人:56.9万
展开全部
#include<stdio.h>
void main()
{
int m,n,i,s,k,p=0;
printf("请输入n m:");
while(scanf("%d %d",&n,&m)!=EOF)
{
for(k=2;k<=m;k++)
{
s=1;
for(i=2;i<=k/2;i++)
{
if(k%i==0)
s=s+i;
}
if(s==k)
if((s>n)&&(s<m))
{
printf("%d ",k);
p=1;
}
}
if(p==0)
printf("None");
printf("\n");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2012-05-04 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1840万
展开全部
#include <stdio.h>
int calc(int n)
{
int sum=0,i;
for(i=1;i*i<=n;i++)
{
if(n%i==0)
{
sum+=i;
if(n/i!=i)sum+=n/i;
}
}
return sum-n;
}
int main(void)
{
int n,m,flag,i;
while(scanf("%d%d",&n,&m)!=EOF)
{
flag=0;
for(i=n;i<=m;i++)
{
if(calc(i)==i)
{
if(flag)putchar(' ');
printf("%d",i);
flag++;
}
}
if(flag==0)puts("None");
else puts("");
}
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式