如何使用JavaScript查找1和N之间的所有数字的总和

How to find the sum of all numbers between 1 and N using JavaScript

本文关键字:数字 之间 何使用 JavaScript 查找      更新时间:2023-09-26

我正试图找到一种使用JavaScript计算1到N之间所有数字之和的方法。以下是我迄今为止尝试过的代码,但似乎不起作用。

function numberSum(N) {
  var total = 0;
    for(var i = 1; i <= N; i++){
      total += i;
    }
    return total;
}

我试着在网上使用jslint和其他验证器来检查我是否遗漏了什么,但这似乎也不能帮助我找到代码不工作的原因。上面有没有我遗漏的东西阻止了脚本执行添加??

您的代码很好。

保持简单:

var res = (n * (n+1)) / 2;

Wiki。

您的代码运行良好。你是怎么运作的?

演示:

function numberSum(N) {
  var total = 0;
    for(var i = 1; i <= N; i++){
      total += i;
    }
    return total;
}
function run(){
  val = document.getElementById("val").value;
  document.getElementById("results").innerHTML=val+": "+numberSum(val)
  }
<input id="val">
<input type="Submit" onclick="run();">
<p id="results"></p>

我知道这个问题已经解决了,但我想发布一个我在阅读完这个帖子后写的ES6 oneliner,并为其他像我一样没有扎实数学背景的人更彻底地解释它。

const numSum = (n) => n * (n+1) / 2;

它之所以有效,是因为它使用了卡尔·弗里德里希·高斯提出的数学公式。(这张照片很棒)。

基本上,每当你把n个数字的和相加时,序列中就会有对。所以高斯发现,你不需要循环遍历每对,然后把它们相加,相反,你只需要把中间的一对相加,然后把这个和乘以对的总数。这对编程来说非常有效,因为它们不会循环通过每个数字,而在编程中,这些数字会消耗掉你的资源。

你可以通过除以n/2来找到对的数量,它也给了你中间的数字,然后你只需要加1就可以找到它的对。

假设你得到1-100的和,通过应用高斯方法,你会想要50(101)=5050。50是对的数量,在代码中,它由n *表示,101是中间对(50+51)的加法,或者在代码(n+1)中,最后我们除以2作为中间数。

function SimpleAdding(num) { 
 
  place = 1;
  i = num;
  do {place = place += i; i--}
  while (i > 1);
  return place; 
         
}

您将占位符变量设置为等于1。您还可以将迭代次数设置为等于输入变量。

do循环然后添加带有"i"的占位符变量,然后当它不再大于1时循环退出,这是正确的,因为占位符等于1。

可以使用递归进行计算

var numberSum = (n, a = n) => n ? numberSum(n = n - 1 , a = a + n) : a

我使用while循环,我认为这更容易

function numberSum(S){
    var a=1;
    var sum=0;
        while(a<=S){
            sum+=a++;
        }
        return(sum);
}
function go(){
    val = document.getElementById("value").value;
    document.getElementById("results").innerHTML=val+":"+numberSum(val)
}
<input id="value">
<input type="Submit" onclick="go();">
<p id="results"></p>

以下代码将以一种简单的方式对有所帮助

let n = parseInt(readLine());
let sum = n*(n+1)/2;
console.log(sum);
function numSum(n){
    var sum = 0;
      for(i = 0; i <= n; i++){
        sum += i; 
         }
    console.log(sum)
         }
numSum(15);

更通用的递归答案。

const sumRange = (min, max) => min !== max 
    ? sumRange(min, max - 1) + max 
    : 0

虽然这可能不是min:0max:n情况下的最佳答案,但它可能是最容易阅读和理解的。