如何解决阶乘数和项目 Euler 20
我需要一些关于下面这段代码的帮助。
function main(n) {
factCounter = 1;
for (let i = n; i > 0; --i) {
factCounter *= i;
}
let numArr = BigInt(factCounter).toString().split('');
let sum = 0;
numArr.forEach((el) => (sum += +el));
console.log(sum);
}
main(100);
这是 Project Euler #20 的解决方案,我需要从 100 中得到所有数字的总和! (阶乘)。 但由于某种原因,它给了我错误的答案。我的输出是 734,但预期输出应该是 648。
解决方法
您正在对浮点数(非 bigint)进行运算,然后在最后转换为 bigint,这并没有完成任何事情。如果乘法溢出,您将得到一个不准确的数字,并且在转换为 bigint 时会保持这种不准确。相反,请始终使用 bigint:
// Add a trigger - add guest on form submit
function Initialize() {
var triggers = ScriptApp.getProjectTriggers();
for(var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
ScriptApp.newTrigger("addGuest")
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit()
.create();
}
function addGuest(e) {
// Find your calendar ID in "Settings and sharing" > "Integrate Calendar". Mine was my email address.
var calendarId = "EMAIL ADDRESS GOES HERE";
var email = e.namedValues['Email'].toString();
// This will only work for standalone events,or the first in an event series (recurring event).
// To find eventId: https://stackoverflow.com/a/46428456
var eventId = "EID GOES HERE";
addGuestAndSendEmail(calendarId,eventId,email);
}
// Note: requires advanced API https://stackoverflow.com/a/55509409
// If an Event Series,this will only work for the the first event
function addGuestAndSendEmail(calendarId,newGuest) {
var event = Calendar.Events.get(calendarId,eventId);
var attendees = event.attendees;
attendees.push({email: newGuest});
var resource = { attendees: attendees };
var args = { sendUpdates: "all" };
Calendar.Events.patch(resource,calendarId,args);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。