【问题标题】:Euler 13: Unexpected result while trying to concat multiple StringEuler 13:尝试连接多个字符串时出现意外结果
【发布时间】:2018-02-25 01:59:20
【问题描述】:

我正在尝试解决this problem on euler

大和

问题 13

算出下列一百个 50 位数字之和的前十位。

37107287533902102798797998220837590246510135740250
46376937677490009712648124896970078050417018260538
74324986199524741059474233309513058123726617309629
...
53503534226472524250874054075591789781264330331690

我正在尝试将所有行合并成一大块行,但是我没有得到预期的结果,谁能看到我在这里做错了什么?

var fs  = require("fs");
var total = "\n";        
let m1 = fs.readFileSync('lines.txt').toString().split('\n').forEach(line => {
    total += line;
})
console.log(total)

输出:

53503534226472524250874054075591789781264330331690

进程以退出代码 0 结束

【问题讨论】:

  • 字符串不是数字。
  • @trincot 这些数字肯定大于 2^53,不是吗?这个问题完全是一个骗局:stackoverflow.com/questions/30678303/…
  • 是的,但问题不是要求对它们全部进行算术运算。
  • 您用于连接字符串的代码确实有效,尽管没有必要在换行符处拆分然后重新加入字符串。你的问题到底是什么?
  • 在这里工作,你的lines.txt一定有问题。

标签: javascript node.js


【解决方案1】:

首先到您问题的最后一部分:输出看起来像这样的原因可能是由输入文件的格式引起的。可能它有\r\n 字符作为换行序列,所以如果你只用\n 分割文本,\r 仍然会打印。因此,最后一行可能会“覆盖”输出中的所有先前行。

您可以通过如下更改split 参数来解决此问题:

.split(/\r?\n/)

对于你试图解决的问题:

  • 尝试连接这些行并不能解决当前的问题。这样一来,您就不会对数值做任何让您更接近解决方案的事情。
  • 问题需要知道和的最后 10 位数字。您的代码中没有尝试提供该功能。这个 10 的原因是 50 位精度的数字相加超出了 JavaScript 的能力,所以你真的需要对此做点什么。

一些提示:

  • 使用slice(-10)获取一行的最后10个字符
  • 在进行任何算术运算之前将字符串转换为数字
  • 使用模运算符 (%) 获取任意和的最后 10 位

【讨论】:

  • OP 明确指出“我要做的是将所有行合并成一大块行”。即使他解决问题的方法不正确,那也不是他要问的。他在问为什么在运行他的代码时这些行没有连接。
  • tl;dr 不要解决欧拉问题并给他答案,给他他提出的具体问题的答案。
  • 第二个。这不是他们要求的。
  • 如果他直接询问问题 13 的答案,那么他的问题会更广泛,基本上只是问“我将如何解决这个问题”。那是不是他所做的。他在代码中将字符串连接在一起特别困难,这就是他寻求帮助的原因。如果他真的想要刚刚发布的问题 13 的解决方案,那么我建议他扩大/编辑他的问题。
  • 更新了我的答案以处理看似截断的输出问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 2016-11-08
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多