当前位置:   article > 正文

C语言刷题-水仙花数及扩展_“4位水仙花数”是指一个4位整数,其各位数字的4次方和等于该数本身。例如:abcd是

“4位水仙花数”是指一个4位整数,其各位数字的4次方和等于该数本身。例如:abcd是

文章目录

题目:打印所有的水仙花数

求解方法一:枚举全部三位数

运行结果

求解方法二:三层for循环分别对个位、十位、百位进行0~9枚举

应用扩展:求解0~10000之间的水仙花数

解题思路:

代码分解:

运行结果:

 总结:


题目:打印所有的水仙花数

什么是水仙花数:水仙花是指一个三位数,其各位数字的立方和等于该数的本身

如:153=1^3+5^3+3^3,那么153被称为水仙花数

求解方法一:枚举全部三位数

通过for循环从100到999依次进行判断,是水仙花数便打印,不是水仙花不打印。

  1. int main()
  2. {
  3. int x=0, y=0, z=0; //分别表示一个三位数的个位、十位、百位
  4. for (int i = 100; i <= 999; i++)
  5. {
  6. x = i % 10;
  7. y = i / 10 % 10;
  8. z = i / 100 % 10;
  9. if (i == (x * x * x + y * y * y + z * z * z))
  10. {
  11. printf("%d\n", i);
  12. }
  13. }
  14. return 0;
  15. }

运行结果

求解方法二:三层for循环分别对个位、十位、百位进行0~9枚举

这种方法较为简单,但是采用了三层for循环,因此计算的次数较多,会增加程序运行时间

  1. int main()
  2. {
  3. int i, j, k, n;
  4. for (i = 1; i < 10; i++)
  5. {
  6. for (j = 0; j < 10; j++)
  7. {
  8. for (k = 0; k < 10; k++)
  9. {
  10. n = 100 * i + 10 * j + k;
  11. if (n == (i * i * i + j * j * j + k * k * k))
  12. {
  13. printf("%d\n", n);
  14. }
  15. }
  16. }
  17. }
  18. return 0;
  19. }

应用扩展:求解0~10000之间的水仙花数

定义扩展:“水仙花数”是指一个n位数,其各位数字的n次方之和恰好等于该数值本身。

解题思路:

(1)对于一个数字,首先需要判断这个数字是几位数,位数用n表示,因此采用一个函数Digit()求解一个数字是几位数,;

(2)因为要求这个数字的每一位数值的n次方,在C语言库函数pow函数可以求解一个数的n次方,为了练习,本次自己创建一个函数Power()用于求解一个数的n次方。

(3)进行了以上操作,便可以判断一个函数是否为水仙花数,创建函数Narcissus()。

代码分解:

(1)判断一个数是几位数

  1. int Digit(int num)
  2. {
  3. int n = 1;
  4. while (num > 9)
  5. {
  6. num = num / 10;
  7. n++;
  8. }
  9. return n;
  10. }

(2)求一个数的n次方

  1. int Power(int n, int k)
  2. {
  3. if (n == 0)
  4. {
  5. return 0;
  6. }
  7. int temp = 1;
  8. for (int i = 0; i < k; i++)
  9. {
  10. temp *= n;
  11. }
  12. return temp;
  13. }

(3)判断一个数是否为水仙花数

是水仙花数函数返回1,不是水仙花数函数返回0

  1. int Narcissus(int num)
  2. {
  3. int n = Digit(num);
  4. int sum = 0;
  5. int number = num; //防止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. return 0;
  16. }

(4)主函数

  1. int main()
  2. {
  3. for (int i = 0; i < 10000; i++)
  4. {
  5. if (Narcissus(i) == 1)
  6. {
  7. printf("%d\n", i);
  8. }
  9. }
  10. return 0;
  11. }

运行结果:

 总结:

在进行代码书写前,首先要规划好代码逻辑,你不要一上来就开始动手写代码,这样很容易让你在书写过程中思路混乱,浪费更多的时间。

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

闽ICP备14008679号