c语言打出所有的水仙花数(C语言水仙花数详解版)

C语言水仙花数(详解版)输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 53 33,接下来我们就来聊聊关于c语言打出所有的水仙花数?以下内容大家不妨参考一二希望能帮到您!

c语言打出所有的水仙花数(C语言水仙花数详解版)

c语言打出所有的水仙花数

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

问题描述

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

问题分析

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

算法设计

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

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

{

//......

}

对代码的说明:

  • 将n整除以100,得出n在百位上的数字hun。
  • 将(n-i*100)整除以10(或将n先整除以10再对10求模n/10),得出n在十位上的数字ten。
  • 将n对10取余,得出n在个位上的数字ind。
  • 求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数。

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

下面是完整的代码:

1. #include <stdio.h>

2. int main()

3. {

4. int hun, ten, ind, n;

5. printf("result is:");

6. for( n=100; n<1000; n ) /*整数的取值范围*/

7. {

hun = n / 100;

9. ten = (n-hun*100) / 10;

10. ind = n % 10;

11. if(n == hun*hun*hun ten*ten*ten ind*ind*ind) /*各位上的立方和是否与原数n 相等*/

12. printf("%d ", n);

13. }

14. printf("\n");

15. return 0;

17. }

运行结果: result is:153 370 371 407

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页