
一道C语言题!(马上要交!在线等。。急)
依次找出1000以内的全部完全数(如果一个数恰好等于它的因子之和,则称该数为“完全数”,如6的因子是1,2,3,并且6=1+2+3,所以6是一个完全数),并输出每个完全数...
依次找出1000以内的全部完全数(如果一个数恰好等于它的因子之和,则称该数为“完全数”,如6的因子是1,2,3,并且6=1+2+3,所以6是一个完全数),并输出每个完全数的因子(升序)
附上流程图的加分 展开
附上流程图的加分 展开
6个回答
展开全部
#include<stdio.h>
void main()
{
int array[1000];//设一个大数组来存放完全数
int num=0;//用num来计完全数的个数
for(int i=1;i<=1000;i++)//将i从1到1000遍历
{
int sum=0;
for(int j=1;j<i;j++)
{
if(i%j==0) sum+=j;//如果j是i的因子,就加到sum里
}
if(i==sum)//sum是i的所有因子之和
{
array[num]=i;//符合条件就将i赋到大数组array中
num++;
}
}
for(int k=0;k<num;k++)
{
printf("%d: ",array[k]);
for(int j=1;j<array[k];j++)//这里有点啰嗦,但是条理清楚
{
if(array[k]%j==0) printf("%d ",j);
}
printf("\n");
}
}
输出结果为6:1 2 3
28:1 2 4 7 14
496:1 2 4 8 16 31 62 124 248
void main()
{
int array[1000];//设一个大数组来存放完全数
int num=0;//用num来计完全数的个数
for(int i=1;i<=1000;i++)//将i从1到1000遍历
{
int sum=0;
for(int j=1;j<i;j++)
{
if(i%j==0) sum+=j;//如果j是i的因子,就加到sum里
}
if(i==sum)//sum是i的所有因子之和
{
array[num]=i;//符合条件就将i赋到大数组array中
num++;
}
}
for(int k=0;k<num;k++)
{
printf("%d: ",array[k]);
for(int j=1;j<array[k];j++)//这里有点啰嗦,但是条理清楚
{
if(array[k]%j==0) printf("%d ",j);
}
printf("\n");
}
}
输出结果为6:1 2 3
28:1 2 4 7 14
496:1 2 4 8 16 31 62 124 248
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你书上答案
#include<stdio.h>
void main()
{
int k[11];
int i,a,n,s;
for(a=2;a<=1000;a++)
{
n=0;s=a;
for(i=1;i<a;i++)
if(a%i==0)
{
n++;
s=s-i;
k[n]=i;//将找到的因子赋给k[1]....k[10]
}
if(s==0)
{
printf("\n%d 是一个完数,它的因子有:",a);
for(i=1;i<n;i++)
printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}
程序调试通过
结果为:
6是一个完数,它的因子有:1,2,3
28是一个完数,它的因子有:1,2,4,7,14
496是一个完数,它的因子有:1,2,4,6,8,16,31,62,124,248
#include<stdio.h>
void main()
{
int k[11];
int i,a,n,s;
for(a=2;a<=1000;a++)
{
n=0;s=a;
for(i=1;i<a;i++)
if(a%i==0)
{
n++;
s=s-i;
k[n]=i;//将找到的因子赋给k[1]....k[10]
}
if(s==0)
{
printf("\n%d 是一个完数,它的因子有:",a);
for(i=1;i<n;i++)
printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}
程序调试通过
结果为:
6是一个完数,它的因子有:1,2,3
28是一个完数,它的因子有:1,2,4,7,14
496是一个完数,它的因子有:1,2,4,6,8,16,31,62,124,248
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdio.h"
#include "math.h"
#define N 1000
int main(int argc, char* argv[])
{
int i,j,k,sum,temp[50]={0};
for(i=2;i<=N;i++)
{
sum=0;
for(k=0;k<50;k++)
temp[k]=0;
k=0;
for(j=1;j<i;j++)
if(i%j==0)
{
sum+=j;
temp[k]=j;
k++;
}
if(sum==i)
{
printf("%d ",i);
k=0;
printf("\nit's factor are: ");
while(temp[k]!=0)
{
printf("%d ",temp[k]);
k++;
}
printf("\n",i);
}
}
return 0;
}
我自己写的
#include "math.h"
#define N 1000
int main(int argc, char* argv[])
{
int i,j,k,sum,temp[50]={0};
for(i=2;i<=N;i++)
{
sum=0;
for(k=0;k<50;k++)
temp[k]=0;
k=0;
for(j=1;j<i;j++)
if(i%j==0)
{
sum+=j;
temp[k]=j;
k++;
}
if(sum==i)
{
printf("%d ",i);
k=0;
printf("\nit's factor are: ");
while(temp[k]!=0)
{
printf("%d ",temp[k]);
k++;
}
printf("\n",i);
}
}
return 0;
}
我自己写的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<math.h>
int Factor(long m)
{int j,sum=1;
for(j=2;j<=sqrt(m);j++)
if(m%j==0)sum+=(j+m/j);
if(sum==m)return 1;
else return 0;
}
int main()
{ long n=0,i;
for(i=2;i<=10000000;i++)
if(Factor(i)){printf("%d是完数!\n",i);n++;}
printf("共有:%d个!\n",n);
getchar();
}
#include<math.h>
int Factor(long m)
{int j,sum=1;
for(j=2;j<=sqrt(m);j++)
if(m%j==0)sum+=(j+m/j);
if(sum==m)return 1;
else return 0;
}
int main()
{ long n=0,i;
for(i=2;i<=10000000;i++)
if(Factor(i)){printf("%d是完数!\n",i);n++;}
printf("共有:%d个!\n",n);
getchar();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这也是我们曾经的考试题。1楼的太NB了,这么短就解决了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询