Как найти сумму ряда повторяющихся чисел?

#javascript

#javascript

Вопрос:

Вопрос, который я пытаюсь решить,:

  • Найдите сумму ряда (3 33 333 3333 … n), до n терминов, где n — ввод, предоставленный пользователем (с помощью подсказки).
  • Пример: дано 5. Таким образом, ряд станет (3 33 333 3333 33333). Ожидаемый результат: 37035

Это мой код:

 const number = 5;
let sum = 3;
let add;

for (i = 0; i <= number; i  ){
  add = "";
  for (j = 1; j <= i; j  ) {
    add  = 3;
    sum = add * 10   3
  }
  sum = sum    *5;
}
console.log(sum);
  

Это не дает мне желаемого результата (что, очевидно, является проблемой, с которой я сталкиваюсь). Я еще не использовал prompt, потому что не знаю, как его реализовать. Кто-нибудь, пожалуйста, может мне помочь?

Комментарии:

1. Всем привет, спасибо за все ваши ответы и решения. Я ценю это.

Ответ №1:

Вам не нужен вложенный цикл. Используйте только один цикл, а внутри увеличьте add на основе степени 10 текущей итерации и добавьте результат к сумме:

 const count = 3
let sum = 0;

let add = 0;
for (i = 0; i < count; i  ){
  add  = 3 * 10 ** i;
  sum  = add;
}
console.log(sum);  

Ответ №2:

Вы можете использовать padEnd() метод для добавления дополнения в конце строки. Пожалуйста, проверьте фрагмент для решения с помощью padEnd() метода. Таким образом, вы можете избежать конкатенации строк или дополнительного цикла.

Пожалуйста, проверьте ссылку, чтобы узнать больше о методе padEnd

 const count = 5;
let number = 3;
let sum = 0;

for(i = 1; i <= count; i  ) {
  sum  = Number(number.toString().padEnd(i, number.toString()));

  console.log(i.toString()   ". "   number.toString().padEnd(i, number.toString()));
}

console.log("Sum: "   sum);  

Ответ №3:

Я думаю, вот что вы спрашиваете, поэтому я перехожу к строке номера итерации, чтобы добавить его в массив, а затем уменьшить свойство javascript, чтобы суммировать все его элементы!!

 const number = 5;
let sum = 3;
let added = '';
let add = [];
sum = sum.toString();
added = sum;
for(let i = 0; i<number; i  ){
  add.push(added);
  added  = sum;
}
let result = add.reduce((ant,sum)=>{
  return parseInt(ant)   parseInt(sum);
});
console.log(result);  

Редактировать: для быстрого вопроса вот ссылка, которая, я надеюсь, вам поможет!

Вы можете использовать это так: const number = prompt(«введите, сколько чисел»);

Ответ №4:

Вот как вы можете это сделать:

   const sumNum = 3;
  const number = Number(prompt('Please enter a number for repeatitions: '));
  let sum = '';
  for (let i = 0; i < number; i  ) {
    for (let j = 0; j <= i; j  ) {
      sum  = sumNum;
    }
    if (i < number) sum  = ' ';
  }
  let total = 0;
  sum = sum.split(' ');
  sum.pop(); //to remove last empty field

  while (sum.length) {
    total  = Number.parseFloat(sum.shift());
  }
  console.log(total);  

Ответ №5:

Чтобы повторить число:

 const x = 3;
Number(`${x}`.repeat(1)); //=> 3
Number(`${x}`.repeat(2)); //=> 33
Number(`${x}`.repeat(3)); //=> 333
Number(`${x}`.repeat(4)); //=> 3333
Number(`${x}`.repeat(5)); //=> 33333
  

Итак, из такого массива [3, 3, 3, 3, 3] мы можем сделать:

 [3, 3, 3, 3, 3].map((x, i) => Number(`${x}`.repeat(i 1)));
//=> [3, 33, 333, 3333, 33333]
  

Но нам не нужно вручную заполнять массив n одинаковыми числами:

 const n = 5;
const x = 3;
Array(n).fill(x);
//=> [3, 3, 3, 3, 3]
  

Или:

 Array.from(Array(n), () => x);
//=> [3, 3, 3, 3, 3]
  

Но, очевидно, если мы можем применить функцию к каждому элементу, мы также можем создать полный ряд:

 Array.from(Array(n), (_, i) => Number(`${x}`.repeat(i 1)));
//=> [3, 33, 333, 3333, 33333]
  

Наконец, мы можем свести ряд к сумме всех чисел:

 [3, 33, 333, 3333, 33333].reduce((tot, x) => tot   x, 0);
//=> 37035
  

Итак, в целом мы имеем:

 const n = 5; // use prompt() but don't forget to coerce the result into a number
const x = 3;

Array.from(Array(n), (_, i) => Number(`${x}`.repeat(i 1)))
  .reduce((tot, x) => tot   x, 0);
  

Если вам не нужно создавать ряд, то рекурсивная функция, возможно, проще:

 const sum_series =
  (x, n, tot=0) =>
    n === 0
      ? tot
      : sum_series(x, n-1, tot =Number(`${x}`.repeat(n)))

sum_series(3, 5);
//=> 37035