J'ai du mal avec ce problème ici:

Écrivez une fonction nommée sumEvery7th qui accepte un entier non négatif n et renvoie la somme des entiers divisibles par 7. Utilisez une boucle while

J'ai ce code jusqu'à présent, mais console.log(sumEvery7th(25)); affiche 63 quand il doit en afficher 42

function sumEvery7th(n){
  let sum=0;
  var i=7;
  while (i<=n) {
    i+=7
    sum+=i;
  }
  return sum;
}

console.log(sumEvery7th(25)); // 7+14+21=42
console.log(sumEvery7th(0)); // expect 0

Merci pour l'aide

0
bababe 5 mai 2020 à 22:35

5 réponses

Meilleure réponse

Votre logique est en panne dans la boucle for. Il existe deux façons de résoudre ce problème:

Vous devez augmenter la somme, puis incrémenter la valeur itérée. Il suffit de changer la ligne pour incrémenter i de 7 pour être en dessous de l'addition de la somme et vous êtes prêt à partir.

function sumEvery7th(n){
  let sum=0;
  var i=7;
  while (i<=n) {
    sum+=i;
    i+=7;
  }
  return sum;
}

console.log(sumEvery7th(25)); // 7+14+21=42
console.log(sumEvery7th(0)); // expect 0

Ou vous pouvez définir i sur 0 et obtenir le même résultat

function sumEvery7th(n){
  let sum=0;
  var i=0;
  while (i<=n) {
    i+=7
    sum+=i;
  }
  return sum;
}

console.log(sumEvery7th(25)); // 7+14+21=42
console.log(sumEvery7th(0)); // expect 0

Choisissez celui qui vous semble le plus naturel, car les deux sont logiques.

N'oubliez pas: l'ordre des opérations est important

0
Robert Mennell 5 mai 2020 à 19:40

L'entrée est également le numéro d'incrément. int--
Boucle de sortie lorsqu'il n'y a plus d'entrée. while (int > 0) {...
Vérifiez par module à chaque itération. if (int % 7 === 0) {...
Lorsqu'un facteur de 7 est trouvé, ajoutez-le à sum. sum +=int

Rendu un peu plus utile en ajoutant un deuxième paramètre pour le facteur. Vous pouvez maintenant utiliser autre chose que 7.

function sumOfFactors(int, fac) {
  let sum = 0;
  while (int > 0) {
    int--;
    if (int % fac === 0) {
      sum += int;
    }
  }
  return sum;
}

console.log(sumOfFactors(25, 7));
console.log(sumOfFactors(58, 7));
console.log(sumOfFactors(0, 7));
console.log(sumOfFactors(77, 7));
0
zer00ne 5 mai 2020 à 19:51

Essayez-le avec une boucle for:

const sumEvery7th = (n) => {
    let sum = 0;

    for (let i = 7; i <= n; i += 7) {
	sum += i;
    }

    return sum;
}

console.log("50 -> ", sumEvery7th(50));
console.log("25 -> ", sumEvery7th(25));
console.log("7 -> ", sumEvery7th(7));
console.log("6 -> ", sumEvery7th(6));
console.log("0 -> ", sumEvery7th(0));
.as-console-wrapper{min-height: 100%!important; top: 0;}
0
Sajeeb Ahamed 5 mai 2020 à 19:39

Changez simplement l'ordre des lignes dans la boucle while

function sumEvery7th(n) {
  let sum = 0;
  var i = 7;
  while (i < n) {
    sum += i;
    i += 7

  }
  return sum;
}

console.log(sumEvery7th(25)); // 42
console.log(sumEvery7th(0)); // 0
0
Vahe Yavrumian 5 mai 2020 à 19:41

La ligne somme + = i; devrait venir avant i + = 7

0
vino geetha 5 mai 2020 à 19:49