写一个c语言,求n位的水仙花数,n为输入量
时间: 2024-10-28 19:13:04 浏览: 30
当然可以,下面是一个简单的C语言程序,它会接受用户输入的位数 `n`,然后找出不超过10^n的所有n位水仙花数:
```c
#include <stdio.h>
#include <math.h>
// 检查一个数是否是n位水仙花数
int is_n_digit_armstrong(int num, int n) {
int sum = 0;
int temp = num;
while (temp > 0) {
int digit = temp % 10;
sum += pow(digit, n); // 把每位数字取n次方相加
temp /= 10;
}
return num == sum; // 如果原数等于各位数之和,则是水仙花数
}
int main() {
int n;
printf("请输入位数(n): ");
scanf("%d", &n);
if (n < 1 || n > 4) { // 水仙花数最多是四位数(9位数的10^4超过了标准)
printf("无效的位数输入!\n");
return 1;
}
for (int i = 1; ; i *= 10) { // 从最小的n位数开始找
if (is_n_digit_armstrong(i, n)) {
printf("%d 是一个 %d 位的水仙花数。\n", i, n);
} else if (i / 1000 == 0) { // 当找到四位数后退出循环
break;
}
}
return 0;
}
```
这段代码首先询问用户输入的位数 `n`,然后检查它是否在有效范围内(1-4位)。接着从10的一次幂开始递增,直到找到所有的n位水仙花数,因为每个更大的数都会比它小的n位水仙花数大10倍以上。
请注意,对于n大于4的情况,由于10^n已经很大,实际上不存在n位的水仙花数,所以这里的范围限制为4位数。
阅读全文