我在HackerRank上的項目歐拉#1的測試用例遇到了一些麻煩,並希望有人在HackerRank有一些JS經驗可以幫助。在HackerRank上的JavaScript項目歐拉#1
下面是我的代碼。據我所知,我無法發現任何明顯的邏輯錯誤,因此,如果有人能夠闡明爲什麼我沒有通過所有測試用例以及爲什麼狀態是「中止調用」,我將不勝感激。上面的所有代碼「忽略此線以上」均由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);
}
}
UPDATE:
每@ 5AR的建議,我代替我的降低與下面的函數;然而,測試案例#2和#3仍然失敗:
return array.reduce(function(accum, currVal) {
return accum.plus(currVal);
}, new BigNumber(0)).toString();
謝謝回答。我首先嚐試了Math.round(),並沒有對這兩個測試用例有所幫助,然後我嘗試使用BigNumber庫(第一次使用外部庫,因爲我一般對編程相當陌生),但也沒有這樣做,工作。我編輯了我的帖子,將我的解決方案包含在BigNumber庫中。 – phao5814
在你對BigNumber解析了一些東西后,不要使用'parseInt',用BigNumber計算所有東西,最後只做'toString()'。 – 5ar
感謝您的更新。我剛剛給你的解決方案又去了,它並沒有幫助不幸。測試用例#2和#3仍然失敗,狀態爲「Abort Called」。我已更新我的帖子以包含您的建議。 – phao5814