题目描述
如果一个三位数等于它自己的每一位数字的立方之和,则称此数为“水仙化数”,如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 归忆)