0
点赞
收藏
分享

微信扫一扫

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


注意:学生党如果存在付费问题可以加我好友,我可以开单篇短时间的免费哟~ 私聊我就好~

前言

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

作者简介

简介:蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。

情景再现

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

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

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

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

????小C:那你看一个例子,有一个数 153,个位是 3、十位是 5、百位是 1,然后个位的立方也就是 3​3​3 等于 27,十位的立方 5​5​5 等于 125,百位的立方 1​1​1 等于 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语言水仙花数题解_#include

????小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语言水仙花数题解_#include_02

????小C:解释一下吧。

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

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

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


举报

相关推荐

c语言:水仙花数

C语言 水仙花数

水仙花数——C语言

c水仙花数

C语言求水仙花数

C语言--水仙花--10

0 条评论