我在HackerRank上的Euler#1项目的测试用例上遇到了麻烦,希望有人在HackerRank上有一定的JS经验可以为您提供帮助。
下面是我的代码。据我所知,我无法发现任何明显的逻辑错误,因此,如果有人可以阐明为什么我不通过所有测试用例以及状态为什么被“中止”,我将不胜感激。 “忽略此行上方”上方的所有代码均由HackerRank提供,并非解决方案的一部分。
process.stdin.resume();
process.stdin.setEncoding('ascii');
var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;
process.stdin.on('data', function (data) {
input_stdin += data;
});
process.stdin.on('end', function () {
input_stdin_array = input_stdin.split("\n");
main();
});
function readLine() {
return input_stdin_array[input_currentline++];
}
/////////////// ignore above this line ////////////////////
function threeFiveMultiples(num) {
let array = [];
for (let i = 0; i < num; i++) {
if (i % 3 === 0 ||
i % 5 === 0) {
array.push(i);
}
}
return array.reduce(function(accum, currVal) {
return accum + currVal;
});
}
function main() {
var t = parseInt(readLine());
for(var a0 = 0; a0 < t; a0++){
var n = parseInt(readLine());
let res = threeFiveMultiples(n);
console.log(res);
}
}
我也尝试过使用BigNumbers库(请参见下文)。
process.stdin.resume();
process.stdin.setEncoding('ascii');
var BigNumber = require('bignumber.js');
var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;
process.stdin.on('data', function (data) {
input_stdin += data;
});
process.stdin.on('end', function () {
input_stdin_array = input_stdin.split("\n");
main();
});
function readLine() {
return input_stdin_array[input_currentline++];
}
/////////////// ignore above this line ////////////////////
function threeFiveMultiples(num) {
let array = [];
for (let i = 0; i < num; i++) {
if (i % 3 === 0 ||
i % 5 === 0) {
array.push(i);
}
}
return parseInt(array.reduce(function(accum, currVal) {
accum = new BigNumber(accum);
currVal = new BigNumber (currVal);
return accum.plus(currVal);
}));
}
function main() {
var t = parseInt(readLine());
for(var a0 = 0; a0 < t; a0++){
var n = parseInt(readLine());
let res = threeFiveMultiples(n);
console.log(res);
}
}
更新:
按照@ 5ar的建议,我用以下代码替换了我的reduce函数;但是,测试用例#2和#3仍然失败:
return array.reduce(function(accum, currVal) {
return accum.plus(currVal);
}, new BigNumber(0)).toString();
最佳答案
您的代码很好。如果仅调用console.log(threeFiveMultiples(1000));,它将为您提供解决方案。不确定所有其他代码是关于什么的,但是那行得通。
关于javascript - HackerRank中JavaScript中的Euler项目#1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46869673/