问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言:一个数如果恰好等于它的所有因子之和,这个数就称为“完数”。编写程序找出1000之内的所有完数

发布网友 发布时间:2022-05-11 13:42

我来回答

4个回答

热心网友 时间:2023-10-13 11:56

源代码如下:

#include <stdio.h>

main()

{

int i,j;

int sum;

for(i=1;i<=1000;i++)

{

sum=0;

 for(j=1;j<i;j++)

 {

if(i%j==0)

sum+=j;

}

 if(sum==i)

 {

printf("%d its factors are ",i);

for(j=1;j<i;j++)

 if(i%j==0)

printf("%d ",j);

 }

 printf("\n");

}

扩展资料

1、完全数是一些特殊的自然数,它所有的真因子即除了自身以外的约数的和即因子函数,恰好等于它本身。

2、第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28。

3、有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。后面的数是496、8128。

热心网友 时间:2023-10-13 11:56

//看我给你改写的。

#include<stdio.h>

int main()

{

int sum=0;

for(int i=1;i<=1000;i++)   //循环在1-1000内进行

{

sum=0;         //每次循环都先将sum初始化为0

for(int j=1;j<i;j++)   //内层循环

if(i%j==0)                //如果j能被i整除,则j是i的因数

sum+=j;           //就累加到sum中

if(sum==i)      //如果和sum等于i这个值

{

printf("完全数有:%d=1",i);  //则输出

for(j=2;j<i;j++)

if(i%j==0)

printf("+%d",j);

printf("\n");

}

}

return 0;

}


热心网友 时间:2023-10-13 11:57

#include<stdio.h>
#include<stdlib.h>
void main(){
int x,y,i,sum,h;
int *a;
printf("1000以内的所有完整数:\n");
for(i=1;i<=1000;i++) {
sum = 1;
a = (int *)malloc (i*sizeof(int));
a[0]=1;
for(x=2,h=1;x<i;x++){
y=i%x;
if(y==0){
a[h] = x;
sum+=x;
h++;
}
}
if(sum==i) {
printf("%d its factors are ",i);
for(x=0;x<h-1;x++)
printf("%d,",a[x]);
printf("%d\n",a[x]);
}
free(a);
}
}

热心网友 时间:2023-10-13 11:57

for(j = 1;j < i;j++)
{
if(i % j == 0)
{
a[k] = j;
k++;
}
}
这个循环是用来找数i的因数j的。每次找到一个因数j,就存放在数组a[]中,下标就是k。
for(h = 0;h < k; h++)
{
s += a[h];
}
这个循环中,h相当于就是对数组a从0到k遍历相加。因为在上一个循环中,每次找到一个因数j,存放在数组a中后,k都做了++操作,所以k的值是在增加的,到最后跳出循环的时候,k的值就是数i的因数的个数了,也就是说数组a中有k个元素了。所以第三个循环时候h是从0开始,以小于k做结束条件的。追问到最后跳出循环的时候,k的值就是数i的因数的个数了,难道不可以用s+=a[k]吗,干嘛要多个h出来,我还是听不懂你的解释啊。能再详细点么?

追答额,k是因数的个数。但是要注意,a[k]是数组下标越界的。你用s+=a[k]的目的,是想说在最外层循环作用下每次可以加一个a[k]嘛?那就完全不对了啊。最外层循环是从1,2,……1000每次一个数来验证这个数是不是完数。而完数的定义是这个数的所有因数之和等于该数,所以s的最终结果是数i的所有因数之和。数组a[]是用来存放每一轮的i的因数们的,一共有k个,分别是a[0],a[1],...a[k-1],而s = a[0] + a[1] + ... + a[k -1]。这个加法必须用循环来写,所以出现了h从0到k-1的循环。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孤胆枪手怎么设置局域网啊、 我家小狗刚领来,没有名字,拜托大家起个名字。 护肤品代加工 水浒Q传跨服PK是怎么回事啊 新水浒Q传什么叫PK保护状态,上号不到一分钟就被打,求解 水浒Q传 为什么要pk有什么好处? 为什么贷款每次都审核失败 有谁能说一下手机贷审核不通过的原因吗?我都审核好多次了都不能通过... 贷款审核失败是什么原因 为什么贷款未通过审核 电话手表在设置怎么找 C语言。编写程序求1000以内的所有完数,并显示输出。 如何用C语言打印1000以内的完数? c语言编程,输入1000以内的完全数 C语言求 1000以内的完全数 C语言编程问题(输出1000以内所有完数) 编写C语言程序,试求1000以内的完全数 用C语言找出1000以内的完数。 115云备份怎么卸载 内存卡里有个文件夹叫tencent的。里面好多乱七八糟的东西。删也删不掉。怎么回事, 工行信使余额变动提醒收不到短信,工行其他短信能收到 不小心发错短信,给95588(工商银行)发送了00000,然后再也收不到金额变更短信了,求解决方案 手机突然收不到工商银行的资金余额变动短信了怎么办? 广州首套房贷最低已降至LPR基准,此举将对当地房地产市场带来哪些影响? QQ文件损坏,无法登录怎么办 我男朋友不太喜欢我,也不主动,虽然我很喜欢他,可我也觉得没有什么意思,该分手吗? 我男朋友不是很喜欢我了 怎么样可以让他喜欢我 男朋友不是很爱我,为什么要跟我在一起? QQ损坏文件,怎么修复 我感觉我男朋友不是特别喜欢我怎么办 请问 求1000以内完全数的c语言程序怎么写,并且结果要按格式输出因子,如:6=1+2+3 编写一段C语言程序,功能为:找出1000之内的所有完数,并按下面格式输出其因子。 用c语言求1000之内的完数 要求输出完数的因子 C语言求1-1000以内的完数。 知豆充一会电就不充了 知豆坏了去哪里维修 知豆汽车厂家倒闭了 售后咋办? 吉利知豆用了百分之二十的电 电量表显示零提示让充电 但是还能开怎么事? 求合适的DVD播放器 dvd播放器下载 免费;dvd播放器免费下载 求所有能够播放DVD的播放器! 请推荐DVD播放器 dvd播放器下载 求电脑达人~~~求好用的免费DVD播放器 学会PS好还是web前端工程师好 史莱姆做得太希了怎么办? 制造组装LED开关电源需要哪些设备?求懂技术的合作伙伴。 请问这种电源开关控制设备应该叫什么? 为什么组装机按下电源开关后3秒钟才灯亮风扇转 白萝卜炖羊肉怎么做好吃