c语言一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数

#include<stdio.h>voidmain(){inti,j,sum=1;for(i=3;i<=1000;i++){sum=1;for(j=2;j<i;j++)i... #include<stdio.h>
void main()
{
int i,j,sum=1;
for(i=3;i<=1000;i++)
{
sum=1;
for(j=2;j<i;j++)
if( i%j==0) sum+=j;
if(i==sum)printf("%d,",i);
}
}
这程序是对的。我想在输出的6 28 496后面添上相应的因子。该怎么改
展开
 我来答
jackwind1987
2012-11-26 · TA获得超过2738个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:493万
展开全部
其实在判断过程中可以输出因子,但这样就是先输出因子再打印结果了。要之后输出的话有两个办法,一是把因子存储起来了,再定义个数组,然后每次判断都存进去;第二个方法是干脆再算一遍
追问
这个我知道、就是说之后输出因子的话怎么去定义数组、我定义过了。程序不通过、
追答
#include
int main()
{
int i,j,sum=1;
int a[100] = {1}, k;
for(i=3; i<=1000; i++)
{
sum=1;
k = 1;
for(j=2; j<i; j++)
if(i%j==0) {
a[k++] = j;
sum+=j;
}
if(i==sum) {
printf("%d,",i);
for (j = 0; j < k ; j++)
printf("%d,", a[j]);
printf("\n");
}
}
}
具体怎么没通过的你先看看这段代码,然后不明白再问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nanhay
2013-09-14 · TA获得超过1173个赞
知道小有建树答主
回答量:824
采纳率:0%
帮助的人:1009万
展开全部
//******************************************************************************
// 找出1000以内的所有完全数
// 程序没问题,稍微精简 一下
//******************************************************************************
#include"stdio.h"
int main()
{
int i,k,s,n; //删除部分没用到的变量
printf("1000以内的所有完数:");
for (n=3;n<=1000;n++)
{
s=k=1;
for (i=2;i<=n/2;i++) //减少循环次数
{
if (n%i==0)
s=i+s;
}
if (s==n)
printf(" %d",n);
}
return 0;
}
//******************************************************************************
// 祝学习进步,更上一层楼 *(^-^)*
//******************************************************************************
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2006-10-22
展开全部
无法保证!我写了个判断1000以内完数的例子,楼主参考一下吧

main()
{
int i,j,sum;
for(i=1; i<1000; i++)
{
sum=0;
for(j=1; j<=i/2; j++)
if(i%j==0) sum+=j;
if(sum==i)
printf("%d是完数\n",i);
}
}

上面这个小程序只做出判断,并没有输出完数的分解的等式。如果非要存储因子再输出的最好利用利用链表存储,原因在于链接中的节点可以动态生成,而这一点正是数组所不具备的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1147a3e
2016-04-09 · 超过23用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:39.8万
展开全部
枚举[2,1000]的所有整数,对于每一个整数k:
_____初始化sum=0
_____枚举[1,k]的每一个整数i
__________若i能整除k,则将i累加到sum上
__________若中途sum>k,则可以直接抛弃对本次的k的处理
_____若sum=k,输出k
退出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三国小风
2012-11-27 · TA获得超过567个赞
知道小有建树答主
回答量:760
采纳率:0%
帮助的人:1213万
展开全部
没太理解你的想法
while (n%i==0)
{
a-=i;
n/=i;
}
这段的意思是判断出来一个数是它的因子然后就把它除掉么?
那么这有两个问题
1.应该用if而不是while,否则会陷入死循环,一直在除1
2.这个想法本身貌似就有点儿问题,比如说18,它的因子包括1,2,3,6,9,但是如果你先除掉2在后面的判断中6就不是因子了,因子之间也有因子的关系

建议用更朴素的算法
for(i=1;i<n;i++)
{
if (n%i==0)
a-=i;
}
if (a==0)
printf("%d ",num);

如果你的想法不是这样的话还请多多指出我的错误啊~祝你成功~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式