前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小白必懂】C语言求完全数

【小白必懂】C语言求完全数

作者头像
1_bit
发布2022-01-06 09:08:00
7200
发布2022-01-06 09:08:00
举报
文章被收录于专栏:我的知识小屋

情景再现

👸小媛:小C,你知道什么是完全数吗?

🐰小C:知道呀,难道是今天老师又出题你又不懂了嘛。

👸小媛:哈哈哈,是的,我现在脑子懵懵的,我的自信心完全受到了打击。

🐰小C:没事的,都是小问题。

👸小媛:其实我是发现老师出的题目都是数学有关,我数学又不好,头都大了,很多知识我都不懂是怎么回事。

🐰小C:慢慢补呗,都是小东西,不难的。

👸小媛:那你赶紧跟我说吧,我要学习。

🐰小C:哈哈哈,行嘞。我们在写求完全数时必须要知道什么是完全数,这个你会吧?

👸小媛:就是不会,所以我就第一步就卡死了。

🐰小C:哈哈哈,那我就跟你解释一下什么是完全数吧。

👸小媛:嗯,悉听教导。

🐰小C:完全数就是这个数的因子等于这个数本身,就是完全数。

👸小媛:???什么是因子,老师也是这样说的,我又不敢问,所以就听不懂。

🐰小C:因子就是可以整除这个数的数,例如一个数 6,可以整除 6 的有哪些呢?

👸小媛:1、2、3 吗?

🐰小C:是的,那你看看 1、2、3 加起来等于几呢?

👸小媛:1、2、3 相加等于 6。

🐰小C:这个 6 是不是本身的数?因为我们刚刚说的是 6 这个数能够被那几个数整除。

👸小媛:是的,难道这样的数就叫做完全数吗?

🐰小C:对的,懂了吧?然后 1、2、3 就叫做这个数的因子。

👸小媛:唔,那么简单?就这?

🐰小C:对呀,你以为有多难。

👸小媛:那代码怎么写呢?多谢小 C 教导。

🐰小C:你就是懒。首先我们算一下一个一个数有是数能够整除,你说怎么做?

👸小媛:不懂。

🐰小C:那我们有一个数 1000,如何判断有什么数能够整除这个数?

👸小媛:用循环吗?

🐰小C:是的,直接使用一个循环,设置一个循环变量,小于 1000 开始递增,如果取模 1000 为 0,那么就表示可以整除。

👸小媛:唔,我懂了,你看看代码是不是这样。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int a;
    printf("能够被整除的数有:");
    for(a=1;a<1000;a++){
		if(1000%a==0){
			printf("%d\n",a);
		}
	}
    
    return 0;
}

👸小媛:下面是结果。

🐰小C:不错,那我们的下一步是什么?

👸小媛:下一步呀?对呀,我们的下一步是啥?我忘了。

🐰小C:我们的下一步就开始记录这些数的和是否等于本身 1000。

👸小媛:对哟,我懂代码怎么写了。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int a,s=0;
    printf("能够被整除的数有:");
    for(a=1;a<1000;a++){
		if(1000%a==0){
			printf("%d\n",a);
			s=s+a;
		}
	}
    
    if(s==1000){
    	printf("1000 是完全数\n");
	}else{
		printf("1000 不是完全数\n");
	}
    
    return 0;
}

👸小媛:然后得出结果,1000 不是完全数。

🐰小C:哈哈哈,会了吧?

👸小媛:会了,挺简单的,好了,那我就先走了,多谢小 C教导。

🐰小C:别急,你想想题目是啥?

👸小媛:题目是说求一个范围内的完全数有哪些,怎么了?

🐰小C:你现在不是只求了一个数 1000,没有求得一个范围的所有数呢。

👸小媛:啊!对哟,所以应该是1-10000 或者说 1-100000 之内有哪些完全数。

🐰小C:索引你这个题还没做完呢。

👸小媛:小C 哥求教。

🐰小C:其实很简单,你想想,之前的代码中 1000 是一个数,我们把这个 1000 编程一个可递增的变量不就好了?

👸小媛:你的意思是说这个 1000 用一个循环变量来控制?然后弄个循环嵌套?

🐰小C:是的,你看看下面的代码。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int a,s=0,j=1;
    printf("完全数有:");
    while(j<10000){
    	s=0;
		for(a=1;a<j;a++){
			if(j%a==0){
				s=s+a;
			}
		}
	    
	    if(s==j){
	    	printf("%d 是完全数\n",j);
		}
		j=j+1;
	}

    return 0;
}

👸小媛:唔,上面的代码就是在原有的代码上加了一个外层循环,就把那个 1000 当作了循环变量,然后把这个外层循环变量 j 拿到之前的代码中替换掉1000就可以了?

🐰小C:是的,还有一点就是把那个计算因子和的变量每次都要置零,这样每次加的数才不会保留上一次的结果,也就是 s=0; 这个代码。

👸小媛:懂了,谢谢小 C,我运行出来了。

🐰小C:那就行,那就没啥问题了。

👸小媛:好耶~

前言

本专栏内容将会以轻松、简单的方式完成习题的解答,用情景再现的文章风格使读者能够在轻松愉悦的阅读氛围中完成知识的吸收,本专栏考虑读者的吸收能力,不讲解过多高效的计算方法,降低阅读门槛,希望各位多多支持~

作者简介

作者名:1_bit

简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。

博客地址:https://i1bit.blog.csdn.net


本专栏已参加 CSDN 蓄力计划,感谢读者支持。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 情景再现
  • 前言
  • 作者简介
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档