C循环-水仙花数\
时间: 2025-05-11 16:27:02 浏览: 19
### 如何用C语言编写程序来找到所有的水仙花数
以下是完整的解决方案,用于查找并打印所有三位数中的水仙花数:
#### 定义与逻辑
水仙花数是指一个三位数,其各个位上的数字立方之和等于该数本身。例如,153 是一个水仙花数,因为 \( 1^3 + 5^3 + 3^3 = 153 \)[^1]。
下面是一个标准的 C 程序实现方法,能够输出所有的水仙花数,并按照特定格式显示它们(每行两个数)。
```c
#include <stdio.h>
int main() {
int i, a, b, c, n = 0;
// 遍历所有三位数
for (i = 100; i <= 999; i++) {
a = i / 100; // 获取百位
b = (i - a * 100) / 10; // 获取十位
c = i % 10; // 获取个位
// 判断是否为水仙花数
if (a * a * a + b * b * b + c * c * c == i) {
printf("%d ", i);
n++;
// 控制输出格式:每两行换一次行
if (n % 2 == 0) {
printf("\n");
}
}
}
return 0;
}
```
此代码通过 `for` 循环逐一检查从 100 到 999 的每一个整数值[^2]。对于每个数字,分别提取它的百位、十位以及个位,并验证这些位数的三次方总和是否与其本身的值一致。如果匹配成功,则认为这是一个水仙花数,并按指定方式打印出来。
另外一种更通用的方法可以扩展至任意长度的数字而非仅限于三位数的情况如下所示:
```c
#include<stdio.h>
#include<math.h>
void narcissisticNumbers(int start,int end){
int num,digit,sum,temp,power;
for(num=start;num<=end;num++){
temp=num;
sum=0;
while(temp!=0){
digit=temp%10;
power=(int)(log10((double)temp)+1);
sum+=pow(digit,(unsigned)power);
temp/=10;
}
if(sum==num){
printf("%d\n",num);
}
}
}
int main(){
narcissisticNumbers(100,999);
return 0;
}
```
上述代码片段展示了另一种更为灵活的方式去发现所谓的阿姆斯特朗数或者称为自恋数,它不仅适用于三位数,还可以处理任何给定范围内具有相同特性的其他自然数实例[^3]。
#### 结论
以上两种算法均能有效找出符合条件的所有水仙花数。第一种专注于固定范围内的简单情况,而第二种提供了更大的灵活性以适应不同场景需求。
阅读全文