Pintia题解——7-13 找出三位水仙花数

7-13 找出三位水仙花数

原题:

本题要求编写程序,输出给定正整数MN区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:

输入在一行中给出两个正整数MN(100≤MN≤999)。

输出格式:

顺序输出MN区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。

如果M或者N不符合题目的要求,则输出Invalid Value.

.

解题思路:

  1. 引入readline模块并创建接口对象:首先将readline模块引入,并使用createInterface方法创建一个接口对象rl。该对象设置了输入流为标准输入。
  2. 读取输入并存储:通过监听'line'事件,将每行输入存储在数组buf中。
  3. 解析输入并进行校验:通过buf[0].split(" ").map(Number)将输入转换为包含两个数值的数组arr。分别将第一个数值赋值给变量m,将第二个数值赋值给变量n。同时,对mn进行有效性校验,如果不满足条件,输出"Invalid Value.",并返回。
  4. 寻找水仙花数:创建空数组res。使用for循环遍历从mn之间的每个数字。对于每个数字,调用函数isDaffodil判断是否为水仙花数,如果是,则将其加入数组res
  5. 输出结果:如果数组res的长度小于1,表示在给定范围内没有找到水仙花数,直接返回。否则,使用for...of循环遍历数组res,并输出每个水仙花数。
  6. 定义函数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
}

.

复杂度分析:

时间复杂度:O(n-m)
空间复杂度:O(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mredust

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

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

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

打赏作者

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

抵扣说明:

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

余额充值