解析C语言水仙花数(详解版)
问题描述
输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如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>
对代码的说明:
-
将n整除以100,得出n在百位上的数字hun。
-
将(n-i*100)整除以10(或将n先整除以10再对10求模n/10%10),得出n在十位上的数字ten。
-
将n对10取余,得出n在个位上的数字ind。
-
求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数。
对于每个位置上的数值将其拆分的算法有很多种,根据不同情况选择不同算法(对于同一问题不同算法的效率有时会相差很多)。
下面是完整的代码:
<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 == hunhunhun + tententen + indindind) /各位上的立方和是否与原数n相等*/
printf("%d ", n);
}
printf("\n");
return 0;
}
</pre>
</pre>
是不是很简单?去实战下吧!少年!
成长之路并不孤单和想学习的人一起学习, 期待你的入住。今天的分享就到这里结束了
image image行文不易,新手上路,多多关注,这真的对我很重要,私信更有惊喜
如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组织:大牛小白C++组织 可以点击编程二字可直达
欢迎加入一起玩转编程
赠送C/C++福利:点击➥获取➲
image