计算n和m之间所有偶数的总和

时间:2018-05-22 09:29:26

标签: javascript

我需要计算nm之间的数字,但出了点问题,我不知道是什么......

function even(){
  var n = document.getElementById("n").value;
  var m = document.getElementById("m").value;
  var s = 0 ;
  if(n<m){
    i = n;
    while(i<=n){
      n*(n+2)/4;
      i++;
      alert(n.value)
    }
  }else if(n>m);{
    i=m;
    S=n*(n+2)/4;
    i++
    alert(m.value)
  }			
}
<input type="text" id="n" > </br><br>
<input type="text" id="m" > </br><br>
<button onclick="even()">Click me !</button>

5 个答案:

答案 0 :(得分:3)

除非特别告诉你使用循环,否则你应该使用公式来计算算术级数的总和。

function even() {
  let n1 = Number(document.getElementById("n").value);
  let n2 = Number(document.getElementById("m").value);
  if (n1 > n2) [n1,n2] = [n2,n1];
  n1 = 2*Math.ceil(n1/2);
  n2 = 2*Math.floor(n2/2);
  if (n1 > n2) return 0;
  return (n1 + n2) * ((n2 - n1) / 2 + 1) / 2;
}
<input type="text" id="n" > <br><br>
<input type="text" id="m" > <br><br>
<button onclick="alert(even())">Click me !</button>

即使您使用循环,您也应该考虑先编号,然后每次将循环变量增加2,而不是每次迭代都检查奇偶校验。

答案 1 :(得分:1)

你试图计算总和,但是,在你的while循环中,你没有将它添加到总和并尝试提醒n.valuem.value这里undefined因为没有value属性。

您可以为同一个(AP)定义逻辑而不是循环

&#13;
&#13;
function even(){
   // convert the values to numbers otherwise it will be strings
    var n = parseInt(document.getElementById("n").value);
    var m = parseInt(document.getElementById("m").value);
    
    if (n > m) [n, m] = [m, n]; // store smaller number in n
    n = (n%2 === 0) ? n: n+1; // find the first even number
    m = (m%2 === 0) ? m: m-1; // find the last even number
    
    var s = 0; // initialize sum to 0
    if(m >= n) {
      var numbers = (m-n)/2 + 1; // number of even numbers in the range
      /* Understanding the formula. It is a basic airthmetic series of n
       * numbers, with first number being a, last number being l
       * which is equal to (a + (n-1)d) where difference
       * being d. The sum will be n/2(a+l) => n/2(a + a + (n-1)d)
       * => n/2(2a + (n-1)d). With our d being 2, equation becomes
       * n/2(2a +(n-1)2) => n(a + n -1). */
      s = numbers*(n + numbers-1);
    }
    
    alert(s);
}
&#13;
<input type="text" id="n" > </br><br>
    <input type="text" id="m" > </br><br>
    <button onclick="even()">Click me !</button>
&#13;
&#13;
&#13;

或者您可以将代码更新为以下

&#13;
&#13;
function even(){
   // convert the values to numbers otherwise it will be strings
    var n = parseInt(document.getElementById("n").value);
    var m = parseInt(document.getElementById("m").value);
    var s = 0 ;
    var i;
    // Iterate over the numbers and check if it is divisible by 2 if yes then add it to the sum and finally alert the sum
    if(n<m){
        i = n;
        while(i<=m){
            if(i%2 === 0) s += i;
            i++;
        }
        alert(s);
    }else if(n>m) {
        i=m;
        while(i<=n){
            if(i%2 === 0) s += i;
            i++;
        }
        alert(s);
    }
}
&#13;
<input type="text" id="n" > </br><br>
    <input type="text" id="m" > </br><br>
    <button onclick="even()">Click me !</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

要仅对偶数执行计算,您需要找到除法的余数。除法的其余部分必须为零

let a = 2;
let b = 10;
for(let i = a; i <= b; i++){
  if (i%2 === 0){
    // do something here even numbers
  }
}

答案 3 :(得分:-1)

试试这个:

if (n < m) {
    for (let i = n; i <= m; i++) {
        if (i%2 === 0)
            s += i;
    }

} else {
    for (let i = m; i <= n; i++) {
        if (i%2 === 0)
            s += i;
    }
}

if (s%2 === 0)是关键,因为它只会添加范围内的数字,当除以2时,数字为0(偶数)。 我还将while循环转换为循环,因为它们更清晰,更易于阅读。

如果您想要消除对外部if-else语句的需要,您还可以尝试使用ternary operators快速设置较低和较高的变量。

答案 4 :(得分:-1)

我把数字作为10和3并且我没有考虑循环中的数字,因为你已经要求这两者之间的偶数之和。我已经得到了和0.我找到了最高和最低的数字使用Ternary operator.using for loop我找到了Even整数并添加了它们。

        var x=10;
        var y=3;
        var higher=x>y?x:y;
        var lower=x>y?y:x;
        var sum=0;
        for(var i=lower+1;i<higher;i++){
            if(i%2==0){
                sum+=i;
            }
        }
    console.log("sum is"+sum)