用C语言找出1000以内的完数。
自己写了一个C语言找出1000以内的完数的小程序,但是运行结果为6,28,36,496.不知道为什么会有36,不知道错在哪里。求解...inta,m,n,sum,b;a=...
自己写了一个C语言找出1000以内的完数的小程序,但是运行结果为6,28,36,496.
不知道为什么会有36,不知道错在哪里。求解...
int a,m,n,sum,b;
a=2;
double i;
while (a<=1000)
{
sum=0;
i=sqrt(a);
for(m=1;m<=i ;m++)
{
for(n=1;n<=a;n++)
if(n*m==a)
{
b=m+n;
sum=sum+b;
if(sum-a==a)
{
printf("%d是完数!\n",a);
}
}
}
a++;
}
printf("\n");
} 展开
不知道为什么会有36,不知道错在哪里。求解...
int a,m,n,sum,b;
a=2;
double i;
while (a<=1000)
{
sum=0;
i=sqrt(a);
for(m=1;m<=i ;m++)
{
for(n=1;n<=a;n++)
if(n*m==a)
{
b=m+n;
sum=sum+b;
if(sum-a==a)
{
printf("%d是完数!\n",a);
}
}
}
a++;
}
printf("\n");
} 展开
5个回答
展开全部
int a,m,n,sum,b;
a=2;
double i;
while (a<=1000)
{
sum=0;
i=sqrt(a);
for(m=1;m<=i ;m++)
{
for(n=1;n<=a;n++)
if(n*m==a)
{
b=m+n;
sum=sum+b;
if(sum-a==a)
{
printf("%d是完数!\n",a); //这里还没有加完,就认为是完数了 1+36+2+18+3+12=72
}
}
}
a++;
}
printf("\n");
}
你的程序效率太低了。如要算更大范围的要花很多时间。
下面给出我的程序:
#include<math.h>
main()
{
int i,a=2,m,sum;
while (a<=30000)
{
sum=1;
i=sqrt(a);
for(m=2;m<=i;m++)
{
if(a%m==0)
sum+=m+a/m;
if(m*m==a)
sum-=m;
}
if(sum==a)
printf("%d是完数!\n",a);
a++;
}
}
a=2;
double i;
while (a<=1000)
{
sum=0;
i=sqrt(a);
for(m=1;m<=i ;m++)
{
for(n=1;n<=a;n++)
if(n*m==a)
{
b=m+n;
sum=sum+b;
if(sum-a==a)
{
printf("%d是完数!\n",a); //这里还没有加完,就认为是完数了 1+36+2+18+3+12=72
}
}
}
a++;
}
printf("\n");
}
你的程序效率太低了。如要算更大范围的要花很多时间。
下面给出我的程序:
#include<math.h>
main()
{
int i,a=2,m,sum;
while (a<=30000)
{
sum=1;
i=sqrt(a);
for(m=2;m<=i;m++)
{
if(a%m==0)
sum+=m+a/m;
if(m*m==a)
sum-=m;
}
if(sum==a)
printf("%d是完数!\n",a);
a++;
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#define N 1000
void main()
{
int k, j, s;
printf("%d内的完数:\n", N);
for (k = 2; k <= N; k++)
{
s = 0;
for (j = 1; j < k; j++)
{
if (k % j == 0) /* 判断是否能被整除,能就相加 */
s = s + j;
}
if (s == k)
printf("%-4d", k);
}
}
#define N 1000
void main()
{
int k, j, s;
printf("%d内的完数:\n", N);
for (k = 2; k <= N; k++)
{
s = 0;
for (j = 1; j < k; j++)
{
if (k % j == 0) /* 判断是否能被整除,能就相加 */
s = s + j;
}
if (s == k)
printf("%-4d", k);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言经典例子之完数求解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int main()
{
int a,m,n,sum,b;
a=2;
double i;
while (a<=1000)
{
sum=0;
i=sqrt(a);
for(m=1;m<=i ;m++)
{
for(n=1;n<=a;n++)
if(n*m==a)
{
b=m+n;
//cout<<b<<" "<<m<<" "<<n<<endl;
sum=sum+b;
}
}
if(sum-a==a)
{
printf("%d是完数!\n",a);
}
a++;
}
printf("\n");
}
你的if位置放错了.
if(sum-a==a)
{
printf("%d是完数!\n",a);
}
{
int a,m,n,sum,b;
a=2;
double i;
while (a<=1000)
{
sum=0;
i=sqrt(a);
for(m=1;m<=i ;m++)
{
for(n=1;n<=a;n++)
if(n*m==a)
{
b=m+n;
//cout<<b<<" "<<m<<" "<<n<<endl;
sum=sum+b;
}
}
if(sum-a==a)
{
printf("%d是完数!\n",a);
}
a++;
}
printf("\n");
}
你的if位置放错了.
if(sum-a==a)
{
printf("%d是完数!\n",a);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询