一个求”完美数”的数学问题.

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:52:53
请帮帮忙好吗?
这东东到底哪里出问题了?能运行却没有结果?
#include "stdio.h"

main()
{
int n=1,p=0,a=1,m;
int s[10];

for (m=1;m<10;m++)
{
do
{
if (m%n==0)
{
s[p]=n;
p++;
}
n++;
}while (m==n);
do
{
s[a-1]=s[a]+s[a-1];
a++;

}while (s[a]==0);
if (s[a-1]==m)
printf("%d",m);
}
getch();
}

"完美数”是一个数能等于其因子的和,如
6=1+2+3
所以6是”完美数”
但是我运行的时候,他没有这个结果.

恕我直言,你这个程序问题很多,与其在一个有很多问题的程序上改来改去,还不如重写一个,重新设计一种算法。尽管如此,还是仔细看看这个程序吧
#include "stdio.h" //这个是标准库的头文件,把“”改成<>好一点
main()
{
int n=1,p=0,a=1,m;
int s[10];

for (m=1;m<10;m++)
{
do
{
if (m%n==0)
{
s[p]=n;
p++;
}
n++;
}while (m==n); //这里条件有错,应该为m!=n;但这样又会陷入死循环,所以
这里会让人不明白你的意图是什么
do
{
s[a-1]=s[a]+s[a-1]; //这条语句有错,不是累加,建议你直接定义个变量
一个个元素加起来还好一点
a++;

}while (s[a]==0);
if (s[a-1]==m)
printf("%d",m);
}
getch();
}
我帮你写了一个求完美数的程序,其实算法很简单,不妨参考一下
#include<stdio.h>
void main()
{
int a,i,s;
for(a=1;a<=1000;a++) //求1000内的完全数
{
for(s=0,i=1;i<=a/2;i++) //判断是否是因数
if(!(a%i)) s+=i; //是,则累加
if(s==a) printf("the number is %4d.\n",a); //如果相等则为完美数
}
}