7-13 找出三位水仙花数
原题:
本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入格式:
输入在一行中给出两个正整数M和N(100≤M≤N≤999)。
输出格式:
顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。
如果M或者N不符合题目的要求,则输出Invalid Value.。
.
解题思路:
- 引入
readline模块并创建接口对象:首先将readline模块引入,并使用createInterface方法创建一个接口对象rl。该对象设置了输入流为标准输入。 - 读取输入并存储:通过监听
'line'事件,将每行输入存储在数组buf中。 - 解析输入并进行校验:通过
buf[0].split(" ").map(Number)将输入转换为包含两个数值的数组arr。分别将第一个数值赋值给变量m,将第二个数值赋值给变量n。同时,对m和n进行有效性校验,如果不满足条件,输出"Invalid Value.",并返回。 - 寻找水仙花数:创建空数组
res。使用for循环遍历从m到n之间的每个数字。对于每个数字,调用函数isDaffodil判断是否为水仙花数,如果是,则将其加入数组res。 - 输出结果:如果数组
res的长度小于1,表示在给定范围内没有找到水仙花数,直接返回。否则,使用for...of循环遍历数组res,并输出每个水仙花数。 - 定义函数
isDaffodil:该函数用于判断一个数字是否为水仙花数。将数字转换为字符串,并遍历每个数字字符,计算其立方和。如果立方和与原数字相等,则返回true,否则返回false。
.
JavaScript(node)代码:
const r = require("readline");
const rl = r.createInterface({
input: process.stdin
});
let buf = [];
rl.on('line', (input) => buf.push(input));
rl.on('close', () => {
let arr = buf[0].split(" ").map(Number)
let m = arr[0]
let n = arr[1]
if (!(100 <= m && m <= n && n <= 999)) {
console.log("Invalid Value.")
return
}
let res = []
for (let i = m; i <= n; i++) {
if (isDaffodil(i)) {
res.push(i)
}
}
if (res.length < 1) {
return
} else {
for (let i of res) {
console.log(i);
}
}
});
function isDaffodil(num) {
let str = "" + num
let sum = 0
for (let i of str) {
sum += parseInt(i) ** 3
}
return num == sum
}
.
本文介绍如何使用Node.js和readline模块解决寻找给定区间内三位水仙花数的问题,提供了解题思路、代码示例,并分析了时间复杂度和空间复杂度。
3万+

被折叠的 条评论
为什么被折叠?



