当前位置: 代码迷 >> C语言 >> [求助]完数的输出格式问题
  详细解决方案

[求助]完数的输出格式问题

热度:96   发布时间:2007-11-06 22:01:55.0
[求助]完数的输出格式问题
编写一个程序找出6-1000之内的所有完数,并安下面的格式输出:
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
可是我不会啊,上面的程序也只能输出所有的完数
请各位大虾帮帮忙啊
搜索更多相关的解决方案: 格式  输出  

----------------解决方案--------------------------------------------------------
for(i=6;i<=1000;i++)
{
sum=0;
k=0;
for(j=1;j<=i/2;j++)
{
if(i%j==0)
{
data[k++]=j;
sum+=j;
}
}
if(sum==i)
{
printf("%d=1",i);
for(t=1;t<k;t++)
{
printf("+%d",data[t]);
}
}
}

----------------解决方案--------------------------------------------------------

搂主 程序也有点问题

[此贴子已经被作者于2007-11-6 22:45:02编辑过]


----------------解决方案--------------------------------------------------------
能不能具体说明一下啊,那里有问题,本人特愚钝,还望解释一下啊,另外能不能不用数组啊,我们还没有学啊,
看不懂,在此先谢谢各位了

----------------解决方案--------------------------------------------------------

#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编辑过]


----------------解决方案--------------------------------------------------------
上楼的先谢谢了啊,但是我要的输出格式,你没有给啊,麻烦你在说一下啊,例如6吧
让他以以下格式输出
6=1+2+3

----------------解决方案--------------------------------------------------------
以下是引用woo23778206在2007-11-8 13:37:11的发言:
上楼的先谢谢了啊,但是我要的输出格式,你没有给啊,麻烦你在说一下啊,例如6吧
让他以以下格式输出
6=1+2+3



#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编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案