水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1 3 +5 3 +3 3 。 本题要求编写程序,计算所有N位水仙花数。
时间: 2024-11-07 08:03:56 浏览: 79
21位水仙花数JAVA代码
5星 · 资源好评率100%
了解,编写一个C语言程序来计算所有的N位水仙花数可以分为两步:遍历所有N位数范围内的数字,并对每个数进行检验,看它们是否满足水仙花条件。这里提供一个基本的算法示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <limits.h>
bool is_narcissistic(int n) {
long long num = 0, sum = 0;
for (int i = 0; i <= n; ++i) {
num *= 10;
num += i;
sum += pow(i, n); // 计算每位数字的n次方
}
return sum == num;
}
void find_narcissistic_numbers(int N) {
for (int i = INT_MIN / 10; i <= INT_MAX / 10; i++) { // 从最小N位数开始到最大N位数
if (is_narcissistic(INT_SIZE - __builtin_clzll(i))) { // INT_SIZE取决于平台,通常32位系统下是32,64位是64
printf("%lld ", i);
}
}
}
int main() {
int N;
printf("请输入N值(至少3): ");
scanf("%d", &N);
if (N < 3) {
printf("N值必须大于等于3.\n");
return 0;
}
find_narcissistic_numbers(N);
return 0;
}
```
注意:此程序对于较大的N值可能会非常耗时,因为它尝试了整个范围的整数。实际应用中,你可能需要优化,比如只计算小于某个界限的水仙花数,或者利用递归等技术。
阅读全文