一道 C语言程序题 高手指教啊

一个数如果恰好等于他的因子之和,这个数就称为完数例如6的因子为1,2,3,而6=1+2+3因此6是完数编程序找出1000之内的所有完数要按6itsfactorsare1,... 一个数如果恰好等于他的因子之和,这个数就称为完数 例如6的因子为1,2,3,而6=1+2+3 因此6是完数 编程序找出1000之内的所有完数
要按 6its factors are 1,2,3 的格式谢谢
展开
 我来答
NGBXIAOWEI
2008-10-06 · TA获得超过832个赞
知道小有建树答主
回答量:444
采纳率:0%
帮助的人:417万
展开全部
俺给你两种方法:
一、
#include M 1000 /*定义寻找范围*/
main()
{int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
int i,a,n,s;
for (a=2;a<=M;a++) /*a是2-1000之间的数,检查它是否是完数*/

{n=0; /*n是用来累计a的因子个数*/
s=a; /*s是用来存放尚未求出的因子之和,开始时=a*/
for (i=1;i<a;i++) /*检查i是否a的因子*/
if (a%i==0) /*如i是a的因子*/
{n++; /*n加1,表示找到一个新因子*/
s=s-i; /*s减去已找到的因子,s的新值是*尚未求出的因子之和*/
switch(n) /*将找到的因子赋值给k1,k2....k9,k10*/
{case 1:
k1=i; break;
case 2:
k2=i; break;
case 3:
k3=i; break;
case 4:
k4=i; break;
case5:
k5=i; break;
case 6:
k6=i; break;
case 7:
k7=i; break;
case 8:
k8=i; break;
case 9:
k9=i; break;
case 10:
k10=i; break;}
}
if (s==0) /*s=0表示全部因子都已找到*/
{printf("%d It factors are",a);
if(n>1)printf("%d,%d",k1,k2); /*n>1表示a至少有2个因子*/
if(n>2)printf(",%d",k3); /*n>2表示a至少有3个因子,故应多输出一个因子*/
if(n>3)printf(",%d",k4); /*以下类似*/
if(n>4)printf(",%d",k5);
if(n>5)printf(",%d",k6);
if(n>6)printf(",%d",k7);
if(n>7)printf(",%d",k8);
if(n>8)printf(",%d",k9);
if(n>9)printf(",%d",k10);
printf("\n");
}
}
}

二\
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-1;
k[n]=i; /*将找到的因子赋值给k1,k2....k9,k10*/
}
if (s==0)
{prinif ("%d It factors are",a);
for (i=1;i<n;i++)
printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}

以上两种方法都可以得到:
6 It factors are 1,2,3
28 It factors are 1,2,4,7,14
496 It factors are 1,2,4,8,16,31,62,124,248

如果觉得代码写得还能通过编译,运行,记得加点分!!
酒色双绝
2008-10-06 · 超过23用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:0
展开全部
求1000以内的完数的C语言代码如下:
#include < stdio.h>
main()
{
int m,i,s;
for(m=1;m<=1000;m++)
{
s=0;
for(i=1;i<m;i++)
if(m%i==0)
s=s+i;
if(s==m)
printf("%d,",s);
}
}
输出结果为:
6,28,496,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
群马山车神4E
2008-10-06 · TA获得超过4579个赞
知道小有建树答主
回答量:1053
采纳率:0%
帮助的人:934万
展开全部
#include < stdio.h>
#include<math.h>
main()
{
int m,i,s;
for(m=1;m<=1000;m++)
{
sum=0;
for(i=1;i<sqrt(m);i++)
if(m%i==0)
sum=sum+i;
if(sum==m)
{
printf("%d,its factors are ",s);
for(i=1;i<sqrt(m);i++)
if(m%i==0)
printf("%d\t",i);

}
}
}
我是在一楼的基础上,稍加改编得到的,其实这道题,学过c++ 或c的都做过哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
模拟山羊山羊菌
2008-10-06 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:0
展开全部
按 6its factors are 1,2,3 的格式输出的:
#include "stdio.h"
void factors(int a);
void main()
{
int num=1,num_c,i;
while(num<=1000)
{
num_c=0;
for(i=1;i<num;i++)
{
if(num%i==0)
num_c+=i;
}
if(num_c==num)
{
printf("%d its factors are ",num_c);
factors(num_c);
}
num++;
}
}
void factors(int a)
{
int factor;
for(factor=1;factor<a;factor++)
if(a%factor==0)
printf("%d ", factor);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丘原0LD37f
2008-10-06 · 超过19用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
void main()
{
int m,i,s;
for(m=1;m<=10000;m++)
{
s=0;
for(i=1;i<m;i++)
if(m%i==0)
s=s+i;
if(s==m)
{
printf("%d,",s);
printf("its factors are,");
for(i=1;i<m;i++)
if(m%i==0)
{
printf("%d,",i);
s=s+i;
}
printf("\n");
}
}
}

我在VC6.0里调过了,输出的结果是
6its factors are 1,2,3,
28its factors are 1,2,4,7,14,
496its factors are 1,2,4,8,16,31,62,124,248,
8128,its factors are,1,2,4,8,16,32,64,127,254,508,1016,2032,4064,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HZS_159404
2008-10-06 · 超过33用户采纳过TA的回答
知道答主
回答量:95
采纳率:0%
帮助的人:106万
展开全部
#include <stdio.h>
void main()
{
int i,j,k,m,sum,a[500];
for(i=1;i<1000;i++)
{
k=0;
sum=0;
for(j=1;j<i;j++)
if(i%j==0)
{
a[k]=j;
sum+=j;
k++;
}
if(sum==i)
{
printf("%dits factors are ",i);
for(m=0;m<k-1;m++)
printf("%d,",a[m]);
printf("%d\n",a[k-1]);
}
}
}

这样就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式