#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