我需要计算n
和m
之间的数字,但出了点问题,我不知道是什么......
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>
答案 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.value
或m.value
这里undefined
因为没有value
属性。
您可以为同一个(AP)定义逻辑而不是循环
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;
或者您可以将代码更新为以下
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;
答案 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)