微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

阶乘数和项目 Euler 20

如何解决阶乘数和项目 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 举报,一经查实,本站将立刻删除。