6=1+2+3
我编写的程序如下:
main()
{
int i,j,sum=0,n;
for(i=6;i<=1000;i++)
{
for(j=1;j<=i;j++)
{
if(i%j==0) n=j;
sum+=n;
if(i==sum) printf("%d\n",i);
}
}
}
请各位看看对不对啊?
我想输出的格式是:
6=1+2+3
可是我不会啊,上面的程序也只能输出所有的完数
请各位大虾帮帮忙啊
#include <stdio.h>
#define MAX 1000
int main(void)
{
int i, j, sum;
for(i = 2; i <= MAX; i++)
{
sum = 0; /* 这里因让 sum ,变为0 */
for(j = 1; j <= i / 2; j++)
/* 这里是 j <= i / 2 ,
这样可以减少循环的次数。
j 必须小与i,不能等于i。
因子就是所有可以整除这个
数的数,但是不包括这个数自身。
比如15的因子是 1,3,5。
*/
{
if(i % j == 0)
sum += j;
}
if(i == sum) /* 这个 if 应放在循环的外面 */
printf("%d\n", i);
}
getchar();
return 0;
}
/*
1000 以内有3个完数。
6
28
496
*/
[此贴子已经被作者于2007-11-8 13:57:46编辑过]
#include <stdio.h>
#define MAX 100000
#define SIZE 1000
int main(void)
{
int i,
j,
sum,
n,
temp[SIZE] ={0};
for(i = 2; i <= MAX; i++)
{
for(j = 1, sum = n = 0; j <= i / 2; j++)
{
if(i % j == 0)
{
if(n >= SIZE)
{
printf("数字%d的因子超过%d!\n", i, SIZE);
break;
}
temp[n++] = j;
sum += j;
}
}
if(i == sum)
{
printf("%d=%d", i, temp[0]);
for(j = 1; j < n; j++)
printf("+%d", temp[j]);
putchar('\n');
}
}
printf("Done.");
getchar();
return 0;
}
[此贴子已经被作者于2007-11-8 14:14:18编辑过]