C语言 求1000以内的完数 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3

请高手给看看下面的代码哪里出错
#include <stdio.h>

main()
{
int a,n,num,i;
for(n=1;n<=1000;n++)
{
a=n;
num=n;
for(i=1;i<=n;i++)
{
while (n%i==0)
{
a-=i;
n/=i;
}
}
if (a==0)
printf("%d ",num);
}
}

#include<stdio.h>

int main()

int i,j,sum=1;

int b[100];

for(i=3;i<=1000;i++)

sum=1;

int k=0;

for(j=2;j<i;j++)

if( i%j==0) {sum+=j;b[k++]=j;}

if(i==sum)

{

printf("%d its factors are %d",i,b[0]);

for(int a=1;a<k; a++)

printf(",%d",b[a]);

printf("\n");

}

}

扩展资料:

c语言需要说明的是:

1.一个C语言源程序可以由一个或多个源文件组成。 

2.每个源文件可由一个或多个函数组成。

3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。  

4.源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。

5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。结构体、联合体、枚举型的声明的“}”后要加“ ;”。

6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

参考资料:

百度百科-c语言

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-05-23

public class five{

public static void main(String[]args){

int sum;

for(int i=1;i&lt;=1000;i++){

sum=0;

for(int j=1;j&lt;i;j++){

if(i%j==0){

sum=sum+j;

}

}

if(i==sum){

System.out.println(i);

}

}

}

}

运行结果:

扩展资料:

class定义和用法

class属性规定元素的类名(classname)。

class属性大多数时候用于指向样式表中的类(class)。不过,也可以利用它通过JavaScript来改变带有指定class的HTML元素。

提示和注释

注释:class属性不能在以下HTML元素中使用:base,head,html,meta,param,script,style以及title。

提示:可以给HTML元素赋予多个class,例如:&lt;span class="left_menu important"&gt;。这么做可以把若干个CSS类合并到一个HTML元素。

提示:类名不能以数字开头!只有Internet Explorer支持这种做法。

第2个回答  2012-02-26
这是修改后的C程序:

#include <stdio.h>

void main()
{
int a,n,num,i;
for(n=1;n<=1000;n++)
{
a=n;
for(i=1;i<=n && a>0;i++)
{
if(n%i == 0)
a -= i;
}
if (a==0)
printf("%d ",n);
}
}

输出结果:
1 6 24 28 496本回答被提问者采纳
第3个回答  2012-02-26
没太理解你的想法
while (n%i==0)
{
a-=i;
n/=i;
}
这段的意思是判断出来一个数是它的因子然后就把它除掉么?
那么这有两个问题
1.应该用if而不是while,否则会陷入死循环,一直在除1
2.这个想法本身貌似就有点儿问题,比如说18,它的因子包括1,2,3,6,9,但是如果你先除掉2在后面的判断中6就不是因子了,因子之间也有因子的关系

建议用更朴素的算法
for(i=1;i<n;i++)
{
if (n%i==0)
a-=i;
}
if (a==0)
printf("%d ",num);

如果你的想法不是这样的话还请多多指出我的错误啊~祝你成功~本回答被网友采纳
第4个回答  2012-11-26
因为只需要输出完数的因子,所以如果在判断过程中保存因子,会存在极多不必要的操作;所以此处选用了在得到完数后再计算一次其因子的方式。

/*
完数:一个数的因子之和等于该数
*/
#include <stdio.h>
#include <string.h>
void main()
{
int i,j,sum=1;
for(i=3;i<=1000;i++)
{
sum=1;
for(j=2;j<i;j++)
{
if( i%j==0)
sum+=j;
}
if(i==sum)
{
printf("%3d, 因子为:",i);
for( j=2; j<i; j++ )
{
if( i%j == 0 )
printf("%3d,", j );
}
printf("\n");
}
}
}
相似回答