输入一个三位的正整数n, 输出100~n范围内所有的水仙花数。 用函数判断一个整数是不是水仙花数,是返回1,不是返回0。 主函数调用该函数,实现输出100~n之间的所有水仙花数。用C语言编写
时间: 2024-12-20 18:23:58 浏览: 6
输入两个正整数m和n求其最大公约数和最小公倍数.pdf
要实现这个功能,你可以创建一个名为`is_narcissistic_number`的函数来判断一个给定的整数是否为水仙花数,然后再在主函数中遍历指定范围内的数字并调用此函数。以下是C语言的代码示例:
```c
#include <stdio.h>
// 函数定义,判断一个整数是否为水仙花数
int is_narcissistic_number(int n) {
int digits[4], sum = 0;
// 分离每一位数字
digits[0] = n % 10;
digits[1] = (n / 10) % 10;
digits[2] = (n / 100) % 10;
if (n >= 1000) { // 处理四位数的情况
digits[3] = n / 1000;
} else {
digits[3] = 0;
}
// 计算每一位的立方和
for (int i = 0; i < 4; ++i) {
sum += digits[i] * digits[i] * digits[i];
}
// 如果和等于原数,它是水仙花数,返回1;否则返回0
return (sum == n);
}
int main() {
int start, end, i;
printf("请输入起始范围(三位数): ");
scanf("%d", &start);
printf("请输入结束范围(不包括): ");
scanf("%d", &end);
if (start > 999 || end < 100 || end <= start) {
printf("无效的输入范围。\n");
return 0;
}
printf("100到%d范围内的水仙花数:\n", end - 1);
for (i = start; i < end; ++i) {
if (is_narcissistic_number(i)) {
printf("%d, ", i);
}
}
printf("\n");
return 0;
}
```
这段代码首先定义了一个`is_narcissistic_number`函数,用于计算输入整数的每位数字立方和并比较其与原始数是否相等。在主函数中,用户会被提示输入一个三位数的范围,然后遍历这个范围内的每个数,如果该数是水仙花数,则打印出来。注意,这里只处理了三位和四位数的情况。
阅读全文