网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 367|回复: 0
打印 上一主题 下一主题

【C语言】用for循环求水仙花数

[复制链接]

686

主题

693

帖子

3101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3101
跳转到指定楼层
楼主
发表于 2024-10-24 22:19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
水仙花数是一个有趣的数学概念,它是指一个 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 之间的所有数字)。虽然对于每个数字,我们都需要进行额外的循环来计算各位数字的立方和,但由于这个内部循环的次数是固定的(对于三位数,最多循环三次),所以它不会影响整体的时间复杂度。
运行这段代码,我们会得到以下输出:
水仙花数有:153370371407
这个结果告诉我们,在 100 到 999 之间,只有这四个数是水仙花数。每个数都满足其各位数字的立方和等于它本身的条件。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 10:34 , Processed in 0.032473 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表