头皮屑多用什么洗发水效果好:C语言问题

来源:百度文库 编辑:神马品牌网 时间:2024/05/08 19:22:21
求完数,输出形式(完数:因子1:因子2....)
因子1为何是0?我的j是从1开始的啊。a[0]应该是1
请教!

main()
{
int n=0,x,i,j,u=0,a[100];
for(i=5;i<=1000;i++)
{
for(j=1;j<i;j++)
{
if((i%j)==0)
{u++;n+=j;a[u]=j;}
}

if(n==i)
{
printf("\t%d",i);
for(x=0;x<=u;x++)printf(":%d",a[x]);

}
n=0;u=0;
}
}

对于这个程序,我给你稍作修改,你上机运行一下就可以看见

#include "stdio.h"
void main()
{
int n=0,x,i,j,u=0,a[100];
for(i=5;i<=1000;i++)
{
for(j=1;j<i;j++)
{
if((i%j)==0)
{n+=j;a[u]=j;u++;} // 这里 我把 u++ 提到后面,否则a[0]是个未知数,应先赋值,在自增
}

if(n==i)
{
printf("\t%d=",i);
for(x=0;x<u;x++)printf("+%d",a[x]); // 这里x不能等于u ,我把x<=u 改了

}
n=0;u=0;
}
printf("\n");
}
测试通过.

首先,我觉得楼主写程序要标明每句的作用,增加可读性~
为什么你要定义a[100]呢?你求的是5-1000,如果都是因子都是2的话只要2的10次幂就有1024了,所以你浪费了内存。
if((i%j)==0) if((i%j)==0)
{u++;n+=j;a[u]=j;} 改 {a[u]=j;u++;n+=j}

其次,我提供个算法2^(n-1)*(2^n-1) 当(2^n-1)是质数,那么这个公式得积为完数
我想你应该按这个算法写一个程序,也可以提高你程序的效率~

试试~ 到时我帮你改改~