水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如: 153 = 1 3 + 5 3 + 3 3 153 =1^3+5^3+3^3 153=13+53+33 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
函数接口定义:
int narcissistic( int number ); void PrintN( int m, int n );函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100 ≤ m ≤ n ≤ 10000。
裁判测试程序样例:
#include <stdio.h> int narcissistic( int number ); void PrintN( int m, int n ); int main() { int m, n; scanf("%d %d", &m, &n); if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m); PrintN(m, n); if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n); return 0; } /* 你的代码将被嵌在这里 */输入样例:
153 400输出样例:
153 is a narcissistic number 370 371请注意最大区间100----10000 也就是会出现4位的水仙花数 所以也就是 列如:1634这样的数 1634 = 1 4 + 6 4 + 3 4 + 4 4 1634=1^4+6^4+3^4+4^4 1634=14+64+34+44 因为本题已经给出了m 或者 n的输出所以你的输出范围一定是 m < x < n
int narcissistic(int number) { int sum = 0, temp = number; //arr[]存放每一位数字 count记录数字位数 int arr[10], count = 0; while (number) { arr[count++] = number % 10; number /= 10; } for (int i = 0; i < count; i++) { //为了方便自己实现了一下pow double pow = 1; for (int j = 0; j < count; j++) { pow *= arr[i]; } //累加每一位 sum += pow; } return sum == temp ? 1 : 0; } void PrintN(int m, int n) { for (int i = m + 1; i <= n - 1; i++) if (narcissistic(i)) printf("%d\n", i); }