用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 语言基础题。 展开
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 语言基础题。 展开
3个回答
展开全部
//因为没有说明结束条件,所以暂且以范围为输入两个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;
}
}
希望对你有用~~
#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;
}
}
希望对你有用~~
展开全部
#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");
}
}
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");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询