【深大C语言OJ】输出m到n之间的水仙花数(循环)

题目描述

如果一个三位数等于它自己的每一位数字的立方之和,则称此数为“水仙化数”,如153=13+53+33。给出范围的起止值(假设起止值均是三位数),输出该范围的水仙花数。
 

输入

范围的开始与终止值(开始值和终止值均是三位数,不用判断数字有效性)

输出

该范围的水仙花数

样例输入

100 999

样例输出

153
370
371
407

思路

1.读取输入:读取两个整数 m 和 n,表示范围的开始和终止值。
2.遍历范围: 使用循环从 m 到 n,对每个三位数进行检查。
3.水仙花数判断: 对于每个三位数,提取各个位上的数字,计算各位数字的立方和。
4.输出水仙花数: 如果计算得到的立方和等于原数,则该数是水仙花数,将其输出。

水仙花数前面做过,这道题只不过多了个范围,用for循环加以限制即可。
注意:注意要用k存i,不然while循环会改变i的值,i的值改变会影响for循环。

错误示范1:for (int i = m; i < n; i++)漏了=号
此时范围不包括n
            
错误示范2:没有int k = i;
注意要用新的变量存i,不然while循环会改变i的值,i的值改变会影响for循环。

参考代码

#include <stdio.h>

int main()
{
  int m, n;

  // 读取输入
  scanf("%d%d", &m, &n);

  // 遍历范围
  for (int i = m; i <= n; i++)
  {
    int original = i; // 保存原始数值
    int sum = 0;

    // 计算各位数字的立方和
    int k = i;    //注意要用k存i,不然while循环会改变i的值,i的值改变会影响for循环
    while (k > 0)
    {
      int digit = k % 10;           // 提取个位数字
      sum += digit * digit * digit; // 计算立方和
      k /= 10;                      // 去掉个位数字
    }

    // 判断是否为水仙花数并输出
    if (sum == original)
    {
      printf("%d\n", original);
    }
  }

  return 0;
}

(by 归忆) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归忆_AC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值