gpt4 book ai didi

javaScript - 求给定整数的所有除数之和

转载 作者:行者123 更新时间:2023-11-30 06:57:48 25 4
gpt4 key购买 nike

我正在做一些编码练习,但我无法解决这个问题。

求给定整数的所有约数之和。对于 n = 12,输入应为sumOfDivisors(n) = 28.

示例:1 + 2 + 3 + 4 + 6 + 12 = 28。

约束:1≤n≤15。

我该如何解决这个问题?我做不到。

function(n){
var arr = [],
finalSum;

if(n <= 1 || n => 16){
return false ;
}
for(var i = 0; i < n; i++){
var tmp= n/2;
arr.push(tmp)
// i need to keep on dividing n but i can't get the way of how to
}
return finalSum;
}

最佳答案

这是另一种方法:

var divisors = n=>[...Array(n+1).keys()].slice(1)
.reduce((s, a)=>s+(!(n % a) && a), 0);

console.log(divisors(12));

JSFiddle:https://jsfiddle.net/32n5jdnb/141/

解释:

  • n=> 这是一个箭头函数,相当于 function(n) {.如果只有一个参数,则不需要 ()。
  • Array(n+1) 创建一个包含 n+1 个元素的空数组
  • .keys() 获取空数组的键(索引即 0、1、2),因此这是一种创建数字序列的方法
  • [...Array(n+1)].keys()] 使用扩展 (...) 运算符将迭代器转换为另一个数组,从而创建一个包含数字序列的数组
  • .slice(1) 删除第一个元素,从而创建一个以 1 开头的序列。还记得 n+1 吗?
  • .reduce() 是一种遍历每个元素并计算一个值以便将数组缩减为一个值的方法。它接收一个回调函数作为参数来计算值和计算的初始值
  • (s, a)=> 是reduce的回调函数。它是一个等价于 function(s, a) {
  • s+(!(n % a) && a) 是值的计算。
  • s+ s(总和)或最后计算的值 +
  • !(n % a) 这仅对具有 0 作为模值的元素返回 true。
  • (!(n % a) && a) 是一个 js“技巧”。情况是 javascript 中的 bool 表达式不返回 true 或 false。它们返回一个“真实”或“虚假”值,然后将其转换为 bool 值。所以实际返回的值是 && 的正确值(考虑到两者都必须是真实的)和为 || 找到的第一个 thuthy 值(考虑到只有一个需要是真实的)。所以这基本上意味着:如果 a 是模值(即 != 0),则返回 a 以添加到总和中,否则返回 0。
  • , 0是reduce计算的初始值。

减少文档:https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

编辑

回答特里斯坦转发:

var divisorsList = [];
var divisors = (n)=>[...Array(n+1).keys()].slice(1)
.reduce((s, a)=>{
var divisor = !(n % a) && a;
if (divisor) divisorsList.push(divisor);
return s+divisor;
}, 0);


console.log('Result:', divisors(12));
console.log('Divisors:', divisorsList);

关于javaScript - 求给定整数的所有除数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43150520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com