当前位置:   article > 正文

求0~10000的水仙花数_0-10000水仙花

0-10000水仙花

题目要求:

                在0~10000内打印出所有的水仙花数.

名词解释:

        水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number)。一个n位数 , 它的每个数位上的数字的 n次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

附:其他位数的自幂数名字

一位自幂数:独身数

三位自幂数:水仙花数

四位自幂数:四叶玫瑰数

五位自幂数:五角星数

六位自幂数:六合数

七位自幂数:北斗七星数

八位自幂数:八仙数

九位自幂数:九九重阳数

十位自幂数:十全十美数

解题思路:

         首先遍历取值范围内的每一个数, 利用一个for循环语句. 每遍历到一个数时, 首先确定这个数是几位数, 这意味着这个数要求多少次方. 得知这个数是n位数后,  利用pow函数求这个数每一位的n次方, 累加起来存放在变量sum里. 最后判断sum是否与这个数本身相等 , 如果相等则说明这个数为题目要求的超完全数字不变数.

代码实现:

(实现的代码本身不复杂不多, 是由于我想要打印文字提示, 所有才看着代码有点多的, 如果想要简化代码方便阅读理解可以将该提示文字即switch函数删掉)

  1. #include<stdio.h>
  2. #include<math.h>
  3. void main()
  4. {
  5. int i = 0, p1, p3, p4, p5, p6, p7, p8, p9, p10;
  6. p1 = p3 = p4 = p5 = p6 = p7 = p8 = p9 = p10 = 0; //变量p1~p10仅是为了打印文字提示
  7. for (; i < 10000; i++)
  8. {
  9. //1.确定为几位数
  10. int buf = i, n = 1;
  11. while (buf/10)
  12. {
  13. n++;
  14. buf /= 10;
  15. }
  16. //2.计算数字的每一个位的n次方
  17. int sum = 0, times = n;
  18. buf = i;
  19. while (times--)
  20. {
  21. sum += pow(buf%10, n); //pow是用来求buf%10的n次方的函数
  22. buf /= 10;
  23. }
  24. //该switch语句只是为了打印出字符提示词, 不需要的话可以省略
  25. switch (n)
  26. {
  27. case 1:
  28. if (p1 == 0)
  29. {
  30. printf("在该范围内独身数有:");
  31. p1 = 1;
  32. }
  33. break;
  34. case 3:
  35. if (p3 == 0)
  36. {
  37. printf("\n在该范围内水仙花数有:");
  38. p3 = 1;
  39. }
  40. break;
  41. case 4:
  42. if (p4 == 0)
  43. {
  44. printf("\n在该范围内四叶玫瑰数有:");
  45. p4 = 1;
  46. }
  47. break;
  48. case 5:
  49. if (p5 == 0)
  50. {
  51. printf("\n在该范围内五角星数有:");
  52. p5 = 1;
  53. }
  54. break;
  55. case 6:
  56. if (p6 == 0)
  57. {
  58. printf("\n在该范围内六合数有:");
  59. p6 = 1;
  60. }
  61. break;
  62. case 7:
  63. if (p7 == 0)
  64. {
  65. printf("\n在该范围内北斗七星数有:");
  66. p7 = 1;
  67. }
  68. break;
  69. case 8:
  70. if (p8 == 0)
  71. {
  72. printf("\n在该范围内八仙数有:");
  73. p8 = 1;
  74. }
  75. break;
  76. case 9:
  77. if (p9 == 0)
  78. {
  79. printf("\n在该范围内九九重阳数有:");
  80. p9 = 1;
  81. }
  82. break;
  83. case 10:
  84. if (p10 == 0)
  85. {
  86. printf("\n在该范围内十全十美数有:");
  87. p10 = 1;
  88. }
  89. break;
  90. }
  91. //3.判断
  92. if (sum == i)
  93. {
  94. printf("%d ",i);
  95. }
  96. }
  97. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/722181
推荐阅读