本题要求用c语言编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。 函数接口定义: int narcissistic( int number ); void PrintN( int m, int n ); 函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。 函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。
时间: 2023-06-23 11:09:07 浏览: 59
以下是题目的解答:
```c
#include <stdio.h>
#include <math.h>
int narcissistic(int number) {
int temp = number, digits = 0, sum = 0;
while (temp > 0) {
digits++;
temp /= 10;
}
temp = number;
while (temp > 0) {
int digit = temp % 10;
sum += pow(digit, digits);
temp /= 10;
}
return sum == number;
}
void PrintN(int m, int n) {
for (int i = m + 1; i < n; i++) {
if (narcissistic(i)) {
printf("%d\n", i);
}
}
}
int main() {
int m, n;
scanf("%d %d", &m, &n);
PrintN(m, n);
return 0;
}
```
思路解析:
题目要求判断一个数是否为水仙花数,即判断这个数的各个位数上的数字的幂和是否等于这个数本身。我们可以通过取模和除法运算来获取这个数的各个位数上的数字,然后计算出幂和,最后判断是否等于这个数本身。
打印开区间(m, n)内所有的水仙花数,可以通过循环遍历这个区间内的每一个数,然后调用narcissistic函数来判断该数是否为水仙花数。如果是,则将该数打印出来。
注意事项:
在计算幂和时,我们可以使用math.h库中的pow函数,该函数的原型如下:
```c
double pow(double x, double y);
```
该函数返回x的y次幂。由于返回值是一个浮点数,所以我们需要将其转换为整数类型,以便与原数进行比较。