c语言 使用函数输出水仙花数

ゝ一纸荒年。 2023-07-15 13:18 136阅读 0赞

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身
本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
函数接口定义:

  1. int narcissistic( int number );
  2. void PrintN( int m, int n );

函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。

裁判测试程序样例:

  1. #include <stdio.h>
  2. int narcissistic( int number );
  3. void PrintN( int m, int n );
  4. int main()
  5. {
  6. int m, n;
  7. scanf("%d %d", &m, &n);
  8. if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
  9. PrintN(m, n);
  10. if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
  11. return 0;
  12. }
  13. /* 你的代码将被嵌在这里 */

我的答案:

  1. int narcissistic(int number)
  2. {
  3. int trans=0;
  4. int sum=0;
  5. int count=0;//一定要赋予初始值,不然IDE疯狂报错
  6. trans = number;
  7. do
  8. {
  9. trans /= 10;
  10. count++;
  11. } while (trans != 0);//得到数字位数
  12. trans = number;
  13. while (trans > 0)//这里是求sum
  14. {
  15. sum += pow(trans % 10, count);//最后一位的count次方,循环相加,得到sum
  16. trans /= 10;//消去最后一位
  17. }
  18. if (sum == number)//相等则为水仙花数
  19. {
  20. return 1;
  21. }
  22. else
  23. {
  24. return 0;
  25. }
  26. }
  27. void PrintN(int m, int n)
  28. {
  29. m=m+1;//这里一定要+1,因为裁判程序已经输出了m,n的结果,不能重复输出
  30. while(m<n)
  31. {
  32. if (narcissistic(m) == 1)
  33. {
  34. printf("%d\n", m);
  35. }
  36. m++;
  37. }
  38. }

完整程序

  1. #include <stdio.h>
  2. int narcissistic( int number );
  3. void PrintN( int m, int n );
  4. int main()
  5. {
  6. int m, n;
  7. scanf("%d %d", &m, &n);
  8. if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
  9. PrintN(m, n);
  10. if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
  11. return 0;
  12. }
  13. int narcissistic(int number)
  14. {
  15. int trans=0;
  16. int sum=0;
  17. int count=0;
  18. trans = number;
  19. do
  20. {
  21. trans /= 10;
  22. count++;
  23. } while (trans != 0);
  24. trans = number;
  25. while (trans > 0)
  26. {
  27. sum += pow(trans % 10, count);
  28. trans /= 10;
  29. }
  30. if (sum == number)
  31. {
  32. return 1;
  33. }
  34. else
  35. {
  36. return 0;
  37. }
  38. }
  39. void PrintN(int m, int n)
  40. {
  41. m = m + 1;
  42. while(m<n)
  43. {
  44. if (narcissistic(m) == 1)
  45. {
  46. printf("%d\n", m);
  47. }
  48. m++;
  49. }
  50. }

发表评论

表情:
评论列表 (有 0 条评论,136人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c语言 水仙花

    水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 本题要求编写程序,计算所有N位水仙花数。 输入格式: 输入在一行中给出一个正整数N(

    相关 C语言水仙花

    题目描述 打印出所有的水仙花数。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3。

    相关 水仙花,C语言

    问题描述:统计水仙花数的个数,并输出 水仙花数指的是,一个三位数,各位的立方和等于其本身。如153=111+555+333=153 编译环境:VC++6.0