水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1 3 +5 3 +3 3 。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。 函数接口定义: int narcissistic( int number ); void PrintN( int m, int n ); 函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。 函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。
时间: 2024-02-18 18:06:14 浏览: 72
水仙花数是指一个 n 位数(n ≥ 3),它的每个位上的数字的 n 次幂之和等于它本身 例如,153 是一个水仙花数,因为 1^
好的,我来为你编写一个判断水仙花数并输出给定区间内所有水仙花数的程序。
代码如下:
```c
#include <stdio.h>
#include <math.h>
int narcissistic(int number) { // 判断是否为水仙花数
int sum = 0;
int n = number;
int count = 0;
while(n) { // 计算数位
n /= 10;
count++;
}
n = number;
while(n) { // 计算每个位上的数字的N次幂之和
int digit = n % 10;
sum += pow(digit, count);
n /= 10;
}
return sum == number;
}
void PrintN(int m, int n) { // 打印区间内的水仙花数
int count = 0;
for(int i = m + 1; i < n; i++) {
if(narcissistic(i)) {
printf("%d\n", i);
count++;
}
}
if(count == 0) {
printf("no\n");
}
}
int main() {
int m, n;
scanf("%d %d", &m, &n);
PrintN(m, n);
return 0;
}
```
在这段代码中,我们定义了一个 `narcissistic` 函数,用于判断一个数是否为水仙花数。该函数接受一个整数作为参数,如果这个数是水仙花数则返回1,否则返回0。
在 `narcissistic` 函数内部,我们首先计算出该数的位数 `count`,然后通过循环计算每个位上的数字的N次幂之和。最后,判断这个和是否等于原数,如果相等则说明这个数是水仙花数,返回1,否则返回0。
在 `PrintN` 函数中,我们遍历给定区间 `(m, n)` 内的所有整数,对于每个整数,判断它是否是水仙花数,如果是,则输出该数,并将计数器加1。最后,如果计数器为0,则说明该区间内没有水仙花数,输出 "no"。
在 `main` 函数中,我们通过 `scanf` 函数读入两个整数 `m` 和 `n`,表示要求 `(m, n)` 区间内的所有水仙花数。然后,我们调用 `PrintN` 函数来输出这些水仙花数。
运行该程序,输入 `100 1000`,输出如下:
```
153
370
371
407
```
这表示100到1000之间的所有水仙花数分别是153、370、371和407。
阅读全文