#include<stdio.h>
void main()
{
int i,j,k,h,s,sum
int a[200]//20个是不够的
s=0
sum=0
for(i=2i<=1000i++)
{
s=0//此处s=0一定要加,因为前几次循环的时候s的值已经改变
k=0
for(j=1j<ij++)
{
if((i%j)==0){a[k]=jk++}
}
for(h=0h<kh++)
{
s+=a[h]
}
if(i==s){printf("%d ",i)sum++}
}
printf("完数的个数:%d\n",sum)
}
时间太紧,没注意程序的简洁性和效率,这个需要你自己改了!
int main (){
int m,n,a,i,e,f
scanf("%d %d",&m,&n)
int count=0//统计m n之间一共多少个符合要求
for(i=mi<=ni++)
{
e=sqrt(i+100)//一个数加100
f=sqrt(i+268)//一个数加268
if ( (sqrt(i+100)==e)&&(sqrt(i+268)==f) )
{
count+=1//计数
printf("%d ",i)//打印
}
}
if( count==0)
{
printf ("no")//在m n之间全部检测结束,如果count依然等于0,才能打印no
}
return 0
}
请采纳,谢谢。
修改了一下,能运行,没有改代码,就把括号改了一下
结果如下
#include <stdio.h>
int main()
{
long int x,y,a,b,c
for(x=1x<=1000x++)
{
int s[100]
a=1
for(y=1y<=x/2y++)
{
if(x%y==0)
{
s[a]=y
a++
}
}
c=0
for(b=1b<=ab++)
{
c=c+s[b]
if (x==c)
{
printf("%d its factors are ",x)
for(c=1c<=bc++)
printf("%d ",s[c])
printf("\n")
}
}
}
}