求0-10000之间的水仙花数,并将这个数输出,打印。

x33g5p2x  于2021-11-21 转载在 其他  
字(1.4k)|赞(0)|评价(0)|浏览(272)

水仙花数的定义

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身。
如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。

题目

求出0~100000之间的所有“水仙花数”并输出。

解题思路

题目讲的是一个n位数,其各位数的n次方之和等于这个数,我们就得先知道这个数有多少位,能够获取到每个位的数,才能够进行计算,并且每个数的n次方我们也得单独进行计算,如此之后才能进行判断。

  • 第一个函数用来判断这个数有多少位。
  • 第二个函数来求一个数的n次方。
  • 第三个函数就是进行水仙花数的判断。

代码分解

  1. 求一个数有多少位
    Digit函数用来求一个数的位数,并作为返回值返回
  1. int Digit(int num)
  2. {
  3. //digit是计算的该数的位数
  4. int n = 1;
  5. while (num > 9)
  6. {
  7. num = num / 10;
  8. n++;
  9. }
  10. return n;
  11. }
  1. 求一个数的n次方
    Power函数是我们求解一个数的n次方,传入两个参数,第一个是这个数,第二个是要求解的次方数
  1. int Power(int n,int k)
  2. {
  3. if (n == 0)
  4. {
  5. return 0;
  6. }
  7. int product = 1;
  8. for (int i = 0; i < k; i++)
  9. {
  10. product *= n;
  11. }
  12. return product;
  13. }
  1. 判断是否为水仙花数
    Narcissus函数用来判断这个数是否为水仙花数,如果是则返回1,不是则返回0
  1. int Narcissus(int num)
  2. {
  3. int n = Digit(num);
  4. int sum = 0;
  5. int number = num;
  6. for (int i = 0; i < n; i++)
  7. {
  8. sum += Power(number % 10, n);
  9. number = number / 10;
  10. }
  11. if (sum == num)
  12. {
  13. return 1;
  14. }
  15. else
  16. {
  17. return 0;
  18. }
  19. //返回值说明:为1则是水仙花数,为0则不是水仙花数
  20. }

整体代码

  1. #include <stdio.h>
  2. //求出0~100000之间的所有“水仙花数”并输出。
  3. //“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身
  4. //如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
  5. int Digit(int num)
  6. {
  7. //digit是计算的该数的位数
  8. int n = 1;
  9. while (num > 9)
  10. {
  11. num = num / 10;
  12. n++;
  13. }
  14. return n;
  15. }
  16. //求n的k次方
  17. int Power(int n,int k)
  18. {
  19. if (n == 0)
  20. {
  21. return 0;
  22. }
  23. int product = 1;
  24. for (int i = 0; i < k; i++)
  25. {
  26. product *= n;
  27. }
  28. return product;
  29. }
  30. //求该数是否为水仙花数
  31. int Narcissus(int num)
  32. {
  33. int n = Digit(num);
  34. int sum = 0;
  35. int number = num;
  36. for (int i = 0; i < n; i++)
  37. {
  38. sum += Power(number % 10, n);
  39. number = number / 10;
  40. }
  41. if (sum == num)
  42. {
  43. return 1;
  44. }
  45. else
  46. {
  47. return 0;
  48. }
  49. //返回值说明:为1则是水仙花数,为0则不是水仙花数
  50. }
  51. int main()
  52. {
  53. for (int i = 0; i < 10000; i++)
  54. {
  55. if (Narcissus(i) == 1)
  56. {
  57. printf("%d ", i);
  58. }
  59. }
  60. return 0;
  61. }

效果图

相关文章