首页 > 编程笔记 > C语言笔记

C语言用for循环求水仙花数(附带源码和解析)

水仙花数是一个有趣的数学概念,它是指一个 3 位数,其各位数字的立方和等于这个数本身。例如,153 就是一个水仙花数,因为 1³ + 5³ + 3³ = 1 + 125 + 27 = 153。这种数字因其独特的性质而得名,就像水仙花一样美丽而独特。
 

在C语言中,我们可以使用 for 循环来寻找所有的水仙花数。这个过程涉及到数学计算和程序逻辑的结合,让我们一步步来解析这个问题。


首先,我们需要理解如何在程序中判断一个数是否为水仙花数,这个过程包括以下几个步骤:


现在,让我们看一下如何使用C语言的 for 循环来实现这个过程:

#include <stdio.h>

int main() {
    int i, sum, digit;
    
    printf("水仙花数有:\n");
    
    for (i = 100; i < 1000; i++) {
        sum = 0;
        int temp = i;
        
        while (temp != 0) {
            digit = temp % 10;
            sum += digit * digit * digit;
            temp /= 10;
        }
        
        if (sum == i) {
            printf("%d\n", i);
        }
    }
    
    return 0;
}

让我们详细解析这段代码:
 

我们使用一个 for 循环遍历所有的三位数(从 100 到 999)。对于每一个数,我们进行以下操作:

当 while 循环结束时,我们就得到了所有位数的立方和。最后,我们再比较 sum 是否等于原数 i;如果相等,那么这个数就是一个水仙花数,我们就将其打印出来。
 

这个算法的时间复杂度是 O(n),其中 n 是我们要检查的数字范围(在这个例子中是 900,因为我们检查了 100 到 999 之间的所有数字)。虽然对于每个数字,我们都需要进行额外的循环来计算各位数字的立方和,但由于这个内部循环的次数是固定的(对于三位数,最多循环三次),所以它不会影响整体的时间复杂度。
 

运行这段代码,我们会得到以下输出:

水仙花数有:
153
370
371
407

这个结果告诉我们,在 100 到 999 之间,只有这四个数是水仙花数。每个数都满足其各位数字的立方和等于它本身的条件。

相关文章