当前位置:   article > 正文

输出10000以内的水仙花数(Narcissistic number)

10000以内的水仙花数

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

例如:1^3 + 5^3+ 3^3 = 153。

解析如下:

  1. #include<stdio.h>
  2. #include<math.h> //pow(a,b)库函数,求a的b次幂(a^b)
  3. int is_narcissistic_number(int i)
  4. {
  5. int n = 1; //最少为一位数
  6. int tmp = i;
  7. int sum = 0;
  8. while (tmp/10) //当此时数字除以10后商为0时标志着位数的计算完毕(n的值)
  9. {
  10. n++;
  11. tmp /= 10; //判断是一个几位数,能除一次10及为两位数
  12. }
  13. tmp = i;
  14. while (tmp)
  15. {
  16. sum += pow(tmp % 10, n); //各位上数字n次幂之和
  17. tmp /= 10; //tmp/10=0时结束
  18. }
  19. return sum == i; //sum=i(是水仙花数)为真,main函数中if语句执行;反之亦然。
  20. }
  21. int main()
  22. {
  23. int i = 0;
  24. for (i = 0; i < 10000; i++)
  25. {
  26. if (is_narcissistic_number(i)) //if语句,如果是水仙花数则输出(i为真则输出,为假则不输出)
  27. {
  28. printf("%d ", i);
  29. }
  30. }
  31. return 0;
  32. }

其中

  1. if (sum == i)
  2. {
  3. return 1;
  4. }
  5. else
  6. {
  7. return 0;
  8. }
  9. return sum == i;

效果相同,可以替换。

纯享版:

  1. #include<stdio.h>
  2. #include<math.h>
  3. int is_narcissistic_number(int i)
  4. {
  5. int n = 1;
  6. int tmp = i;
  7. int sum = 0;
  8. while (tmp / 10)
  9. {
  10. n++;
  11. tmp /= 10;
  12. }
  13. tmp = i;
  14. while (tmp)
  15. {
  16. sum += pow(tmp % 10, n);
  17. tmp /= 10;
  18. }
  19. return sum == i;
  20. }
  21. int main()
  22. {
  23. int i = 0;
  24. for (i = 0; i < 10000; i++)
  25. {
  26. if (is_narcissistic_number(i))
  27. {
  28. printf("%d ", i);
  29. }
  30. }
  31. return 0;
  32. }

运行:

祝你开心

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

闽ICP备14008679号