C语言完全数问题求解
完全数(PerfectNumber)是一个古老而富有趣味的问题。所谓完全数是指这样的自然数,它除了本身以外的所有整除因子(aliquotparts)的和等于其本身.例如,...
完全数(Perfect Number)是一个古老而富有趣味的问题。所谓完全数是指这样的自然数,它除了本身以外的所有整除因子(aliquot parts)的和等于其本身.例如,第一个完全数是6,因为6除了其本身的因子有1、2、3,且6=1+2+3.
现在你的任务是在给定的范围中找到所有的偶完全数. 由小到大输出小于n的所有偶完全数,每个数之间用一个空格分隔,如果小于n的所有偶完全数的个数为0,则输出“None.”
请大家帮忙看一下这个程序哪里错了?
#include<stdio.h>
int judge(int n)
{int p,s=0,te=0;
for(p=1;p<n;p++)
{if(n%p==0)
s+=p;}
if(s!=n)
te=1;
return(te);
}
void main()
{int n,i,t=0,x=0,k=0,a[50000];
scanf("%d",&n);
for(i=1;i<n;i++);
{if(judge(i)==0&&i%2==0)
{a[t]=i;
t++;
x+=1;
k=1;}
}
if(k==1&&x!=1)
{for(i=0;i<x-1;i++)
{printf("%d ",a[i]);}
printf("%d",a[x-1]);}
else if(k==1&&x==1)
{printf("6");}
else if(k==0)
{printf("none");}
}
感谢lkjhggv的回答。但是您这样输出后最后会出现这样的情况”6,24,“而标准输出仅需要“6,24”后者的逗号是不需要的,这是我用数组而避免统一使用判别式的原因。如果用bool控制的话最后一个逗号怎么办呢?我不是很清楚。希望有解决的方法。另外就是我的程序运行时凡是大于6的都显示None。这个不知道是怎么回事。还望解答。谢谢!一定追分。 展开
现在你的任务是在给定的范围中找到所有的偶完全数. 由小到大输出小于n的所有偶完全数,每个数之间用一个空格分隔,如果小于n的所有偶完全数的个数为0,则输出“None.”
请大家帮忙看一下这个程序哪里错了?
#include<stdio.h>
int judge(int n)
{int p,s=0,te=0;
for(p=1;p<n;p++)
{if(n%p==0)
s+=p;}
if(s!=n)
te=1;
return(te);
}
void main()
{int n,i,t=0,x=0,k=0,a[50000];
scanf("%d",&n);
for(i=1;i<n;i++);
{if(judge(i)==0&&i%2==0)
{a[t]=i;
t++;
x+=1;
k=1;}
}
if(k==1&&x!=1)
{for(i=0;i<x-1;i++)
{printf("%d ",a[i]);}
printf("%d",a[x-1]);}
else if(k==1&&x==1)
{printf("6");}
else if(k==0)
{printf("none");}
}
感谢lkjhggv的回答。但是您这样输出后最后会出现这样的情况”6,24,“而标准输出仅需要“6,24”后者的逗号是不需要的,这是我用数组而避免统一使用判别式的原因。如果用bool控制的话最后一个逗号怎么办呢?我不是很清楚。希望有解决的方法。另外就是我的程序运行时凡是大于6的都显示None。这个不知道是怎么回事。还望解答。谢谢!一定追分。 展开
2个回答
展开全部
怎么你的程序这么长?
#include<stdio.h>
int main()
{
int i,j,n,sum,bool=1;
scanf("%d",&n);
for(i=2;i<=n;i+=2)//只需要偶数
{
sum=3;//1和2必定是其因子
for(j=3;j*j<i;++j)//所以因子从3开始判断
if(!(i%j)){sum+=(j+i/j);}//如果j是i的因子,那么i/j也是i的因子
if(!(i%j))sum+=j;//如果j*j=i,那么j只能加一次
if(i==sum)//如果是完全数
{if(bool)bool=0;
printf("%d,",i);}
}
if(bool)printf("NONE!");
return 0;
}
------------------------逗号控制这里改下就OK拉
if(i==sum)//如果是完全数
{if(bool){bool=0;printf("%d",i);}
else printf(",%d",i);}
}
#include<stdio.h>
int main()
{
int i,j,n,sum,bool=1;
scanf("%d",&n);
for(i=2;i<=n;i+=2)//只需要偶数
{
sum=3;//1和2必定是其因子
for(j=3;j*j<i;++j)//所以因子从3开始判断
if(!(i%j)){sum+=(j+i/j);}//如果j是i的因子,那么i/j也是i的因子
if(!(i%j))sum+=j;//如果j*j=i,那么j只能加一次
if(i==sum)//如果是完全数
{if(bool)bool=0;
printf("%d,",i);}
}
if(bool)printf("NONE!");
return 0;
}
------------------------逗号控制这里改下就OK拉
if(i==sum)//如果是完全数
{if(bool){bool=0;printf("%d",i);}
else printf(",%d",i);}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询