猿问

如何求一系列重复数字的和?

我想解决的问题是:

  • 求 n 项的级数 (3 + 33 + 333 + 3333 + ... + 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,因为我不知道如何实现它。有人可以帮我吗?


德玛西亚99
浏览 159回答 4
4回答

慕森王

您不需要嵌套循环。仅使用一个循环,并在内部add根据当前迭代的 10 次方递增,并将结果添加到总和中:const count = 3let sum = 0;let add = 0;for (i = 0; i < count; i++){&nbsp; add += 3 * 10 ** i;&nbsp; sum += add;}console.log(sum);

白板的微信

您可以使用该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);

慕码人2483693

重复一个数字:const x = 3;Number(`${x}`.repeat(1)); //=> 3Number(`${x}`.repeat(2)); //=> 33Number(`${x}`.repeat(3)); //=> 333Number(`${x}`.repeat(4)); //=> 3333Number(`${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 numberconst x = 3;Array.from(Array(n), (_, i) => Number(`${x}`.repeat(i+1)))&nbsp; .reduce((tot, x) => tot + x, 0);如果您不需要生成一个系列,那么递归函数可能更简单:const sum_series =&nbsp; (x, n, tot=0) =>&nbsp; &nbsp; n === 0&nbsp; &nbsp; &nbsp; ? tot&nbsp; &nbsp; &nbsp; : sum_series(x, n-1, tot+=Number(`${x}`.repeat(n)))sum_series(3, 5);//=> 37035

弑天下

这就是你问我的问题,所以我转而将迭代编号字符串化,以便将其添加到数组中,然后减少 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 =提示(“输入多少数字”);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答