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)。对于每一个数,我们进行以下操作:
- 初始化一个变量 sum 为 0,用于存储各位数字的立方和。
- 创建一个临时变量 temp,并将其赋值为当前遍历到的数 i。
- 使用一个 while 循环来提取这个数的每一位。我们通过对 10 取余(% 10)来获取最后一位数字,然后将这个数字的立方加到 sum 中。
-
将 temp 除以 10(整除,舍弃小数部分),这样就可以处理下一位数字。
当 while 循环结束时,我们就得到了所有位数的立方和。最后,我们再比较 sum 是否等于原数 i;如果相等,那么这个数就是一个水仙花数,我们就将其打印出来。
这个算法的时间复杂度是 O(n),其中 n 是我们要检查的数字范围(在这个例子中是 900,因为我们检查了 100 到 999 之间的所有数字)。虽然对于每个数字,我们都需要进行额外的循环来计算各位数字的立方和,但由于这个内部循环的次数是固定的(对于三位数,最多循环三次),所以它不会影响整体的时间复杂度。
运行这段代码,我们会得到以下输出:
水仙花数有: 153 370 371 407
这个结果告诉我们,在 100 到 999 之间,只有这四个数是水仙花数。每个数都满足其各位数字的立方和等于它本身的条件。