所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。
例如153是水仙花数,153是一个3位数,并且153 = 1^3 + 5^3 + 3^3。
第一行输入一个整数n,表示一个n位的正整数。n在3到7之间,包含3和7。
第二行输入一个正整数m,表示需要返回第m个水仙花数。形如HH:SS字符串,表示原始输入。
返回长度是n的第m个水仙花数。个数从0开始编号。
若m大于水仙花数的个数,返回最后一个水仙花数和m的乘积。
若输入不合法,返回-1。
function calculate() {
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('请输入一个n位的正整数(n在3到7之间):', n => {
if (n >= 3 && n <= 7) {
rl.question('请输入需要返回第m个水仙花数(m为非负整数):', m => {
m = parseInt(m);
if (!isNaN(m) && m >= 0) {
const min = Math.pow(10, n - 1);
const max = Math.pow(10, n) - 1;
const data = {};
let count = 0;
let lastNum = 0;
for (let i = min; i <= max; i++) {
if (check(i, n)) {
data[count++] = i;
if (i > lastNum) {
lastNum = i;
}
}
}
if (data.hasOwnProperty(m)) {
console.log(`第${m}个水仙花数为:${data[m]}`);
} else {
console.log(`第${m}个水仙花数不存在,返回最后一个水仙花数${lastNum}乘以${m}的值:${lastNum * m}`);
}
} else {
console.log('输入不合法,请输入一个非负整数作为m!');
}
rl.close();
});
} else {
console.log('输入不合法,请输入一个在3到7之间的整数作为n!');
rl.close();
}
});
}
function check(a, n) {
const numStrs = String(a).split('');
const data = numStrs.map(Number);
let sum = 0;
for (let i = 0; i < n; i++) {
sum += Math.pow(data[i], n);
}
return sum === a;
}
calculate();
下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。