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

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。

前言

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

作者简介

作者名: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:是的,你先试试这一步你能不能完成。

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

#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,也就是他们原本的数,你知道怎么做吗?

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

#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 蓄力计划,感谢读者支持。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1_bit

你的余额交给我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值