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

【必懂】C语言水仙花数题解

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

前言

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

作者简介

作者名:1_bit

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

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


情景再现

🐰小C:Hi~小媛,怎么今天垂头丧气的?

👸小媛:小C,你可要救救我。今天在一个学习群里,他们在讨论一个叫做求水仙花数的内容,我不懂水仙花数,我感觉我被打击了。 😭

🐰小C:哈哈哈,水仙花数呀,水仙花数其实就是指一个三位数,他们的个位、十位、百位的立方和等于这个三位数本身。

👸小媛:他们也是这样解释的,但我还是不懂呀。

🐰小C:那你看一个例子,有一个数 153,个位是 3、十位是 5、百位是 1,然后个位的立方也就是 333 等于 27,十位的立方 555 等于 125,百位的立方 111 等于 1,而这些立方 27、125 以及 1 相加起来是不是等于 153?

👸小媛:是呀,那又怎么样? 😂

🐰小C:这 153 不就是这个三位数本身吗?这个三位数本书也是等于 153 呢。

👸小媛:唔,你意思就是说符合这种规律的数就叫做水仙花数吧?

🐰小C:是的,理解了吗?

👸小媛:懂是懂了,那怎么写呢? 😨

🐰小C:其实这道题不难,有简单的解法;我们知道,一个三位数的范围是大于 99 以及小于 1000,那么我们只需要取模在 99 到 1000 之间数的个位、十位、百位,随后使用这些书进行立方计算,最后进行求和,将最后的结果与原有的数进行对比,这时就可以得知当前的数是否是水仙花数了。

👸小媛:你的意思就是说使用一个循环,然后这个循环从变量直接从 100 开始往 1000 循环,随后对这个循环变量进行取模,取到个位、十位、百位就可以进行计算了?

🐰小C:是的,你先试试这一步你能不能完成。

👸小媛:你在小看我,那么简单,你看下面的代码。 😡

代码语言:javascript
复制
#include<stdio.h>
int main(){
	int ones,tens,hundreds,i;
	for(i=100;i<1000;i++){
		ones=i%10;
		tens=i/10%10;
		hundreds=i/100;
		printf("%d : ones=%d , tens=%d , hundreds=%d \n",i,ones,tens,hundreds);
	}
}

🐰小C:那你来解释一下循环里面你是怎么获取个位、十位、百位的吧。

👸小媛:其实很简单呀,循环是从 100 到 1000的循环,那么循环变量 i 也会逐渐进行增加,那么想要获取个位,那么直接直接这个循环变量取模10就可以得到个位的数了。

🐰小C:具体怎样可以详细说说吗?

👸小媛:那我给你举个例子吧,例如 153%10 也就是 153 取模 10,取模就是除这个 10 后得到一个余数就是结果,那么此时除 10 就会得到数字 3,这个 3 就是得数,那么就得到了个位,代码就可以写成 ones=i%10;;百位的获取也简单,首先给 153 除 10,由于除 10 后是15.3 但是整型并不保留小数位,那么就可以得到 15,此时再对 15 进行取模即可得到 5 这个结果,代码写成 tens=i/10%10;;最后的百位即同理,直接除 100 就得到了 hundreds=i/100;

🐰小C:行,不错。那你去进行检验过了吗?检验可是最直接的验证方式。

👸小媛:当然,下面就是结果。

🐰小C:那么你就还剩一步,判断个位、十位、百位上的数字的立方相加是否等于循环变量 i,也就是他们原本的数,你知道怎么做吗?

👸小媛:当然知道,那么简单的需求,你看下面的完整代码。

代码语言:javascript
复制
#include<stdio.h>
int main(){
	int ones,tens,hundreds,i;
	printf("水仙花数有:\n");
	for(i=100;i<1000;i++){
		ones=i%10;
		tens=i/10%10;
		hundreds=i/100;

		if(i==ones*ones*ones+tens*tens*tens+hundreds*hundreds*hundreds){
			printf("%d 、",i);
		}
	}
}

👸小媛:结果在下面。

🐰小C:解释一下吧。

👸小媛:其实也就是在 for 循环中添加了一个 if 语句,判断当前的循环变量 i 是否等于个位立方、十位立方、百位立方的相加和,如果等于就直接输出就好了,在输出内容的时候我也没有换行,为了并排显示,所以就没加换行 \n

🐰小C:哈哈哈,考虑的挺周到的,那你懂水仙花数了吧?不难吧?

👸小媛:之前只是没想过来,都是小东西。

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

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

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

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

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

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