程序猿阵线联盟-汇总各类技术干货

解析C语言水仙花数(详解版)

2019-11-10  本文已影响0人  梦想学堂

问题描述

输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13+ 53+ 33。

问题分析

根据“水仙花数”的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为s),若s与给出的三位数相等, 三位数为“水仙花数”,反之,则不是。

算法设计

“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是 100〜999。对应的循环条件如下:

<pre class="public-DraftStyleDefault-pre" data-offset-key="c3l1h-0-0" style="margin: 1.4em 0px; padding: 0.88889em; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: auto; border-radius: 4px; color: rgb(26, 26, 26); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background: rgb(246, 246, 246);">

<pre class="Editable-styled" data-block="true" data-editor="28fvh" data-offset-key="c3l1h-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; border-radius: 0px; background: rgb(246, 246, 246);">

for(n=10; n<1000; n++)

</pre>

<pre class="Editable-styled" data-block="true" data-editor="28fvh" data-offset-key="ctvb3-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; border-radius: 0px; background: rgb(246, 246, 246);">

{

</pre>

<pre class="Editable-styled" data-block="true" data-editor="28fvh" data-offset-key="bj805-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; border-radius: 0px; background: rgb(246, 246, 246);">

//......

</pre>

<pre class="Editable-styled" data-block="true" data-editor="28fvh" data-offset-key="edntn-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; border-radius: 0px; background: rgb(246, 246, 246);">

}

</pre>

</pre>

对代码的说明:

对于每个位置上的数值将其拆分的算法有很多种,根据不同情况选择不同算法(对于同一问题不同算法的效率有时会相差很多)。

下面是完整的代码:

<pre class="public-DraftStyleDefault-pre" data-offset-key="9694j-0-0" style="margin: 1.4em 0px; padding: 0.88889em; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: auto; border-radius: 4px; color: rgb(26, 26, 26); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background: rgb(246, 246, 246);">

<pre class="Editable-styled" data-block="true" data-editor="28fvh" data-offset-key="9694j-0-0" style="margin: 0px; padding: 0px; font-size: 0.9em; word-break: normal; word-wrap: normal; white-space: pre; overflow: initial; border-radius: 0px; background: rgb(246, 246, 246);">

include <stdio.h>

int main()
{
int hun, ten, ind, n;
printf("result is:");
for( n=100; n<1000; n++ ) /整数的取值范围/
{
hun = n / 100;
ten = (n-hun100) / 10;
ind = n % 10;
if(n == hun
hunhun + tententen + indindind) /各位上的立方和是否与原数n相等*/
printf("%d ", n);
}
printf("\n");

return 0;

}

</pre>

</pre>

是不是很简单?去实战下吧!少年!

成长之路并不孤单和想学习的人一起学习, 期待你的入住。今天的分享就到这里结束了

image image

行文不易,新手上路,多多关注,这真的对我很重要,私信更有惊喜

如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组织:大牛小白C++组织 可以点击编程二字可直达

欢迎加入一起玩转编程

赠送C/C++福利:点击➥获取

image
上一篇 下一篇

猜你喜欢

热点阅读