嵌套循环中的Sum返回错误

Sum in nested loops returning incorrect

本文关键字:返回 错误 Sum 嵌套循环      更新时间:2023-09-26

不知道这里有什么问题,但我试图在数组中添加一组数字(不是整个数组),但它看起来像是整个数组的总和:

function sumPrimes(num) {
  var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
  var total = 0;
  var index;
  //loop through the whole array
  for (var i = 0; i < arr.length; i++) {
    //find matching prime number
    if (num < arr[i]) {
      // get index of prime number in the array
      index = arr.indexOf(arr[i]);
      //sum up total of prime numbers up to 'num'
      for (var b = 0; b < index; b++) {
        total = total + arr[index];
      }
    }
  }
  return total;
}
sumPrimes(10);

如果您的目标是计算小于给定数的所有素数的和,那么解决方案要容易得多。

function sumPrimes(num) {
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
    var total = 0;
    for (var x of arr) {
        if (x < num)
            total += x;
        else
            break;
    }
    return total;
}

arr排序时起作用,或者

function sumPrimes(num) {
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
    var total = 0;
    arr.forEach(function(x) {
        if (x < num)
            total += x; 
    }, this);
    return total;
}

您需要将index替换为b:

//sum up total of prime numbers up to 'num'
for(var b=0; b<index; b++){
    total = total + arr[b];
}

编辑:并去掉外部循环