为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2023-07-14 16:37:25
我想解决的问题是:求 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,因为我不知道如何实现它。有人可以帮我吗?
查看完整描述

4 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

您不需要嵌套循环。仅使用一个循环,并在内部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);


查看完整回答
反对 回复 2023-07-14
?
白板的微信

TA贡献1883条经验 获得超3个赞

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


查看完整回答
反对 回复 2023-07-14
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

重复一个数字:


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


查看完整回答
反对 回复 2023-07-14
?
弑天下

TA贡献1818条经验 获得超8个赞

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


查看完整回答
反对 回复 2023-07-14
  • 4 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信