javascript中的数字非常大

时间:2015-06-06 02:21:31

标签: javascript types numbers integer biginteger

我正在处理Project Euler问题(目前question 13)。

对于这个问题,我必须找到100个数字之和的前10位数字,所有数字都与此相似:

91,942,213,363,574,161,572,522,430,563,301,811,072,406,154,908,250

我想我可以使用类似Java的BigInteger,但我开始用JavaScript解决问题(我试图提高我的js工作能力),我想继续使用它,甚至解决了这个问题。

如果可能,我想坚持使用纯粹的JS。

5 个答案:

答案 0 :(得分:13)

您将需要一个基于javascript的BigInteger库。有很多可供选择。这是一个https://github.com/peterolson/BigInteger.js

您可以像这样使用

var n = bigInt("91942213363574161572522430563301811072406154908250")
    .plus("91942213363574161572522430563301811072406154908250");

答案 1 :(得分:4)

JavaScript最近获得了新的原始数据类型BigInthttps://github.com/tc39/proposal-bigint

只有Chrome浏览器现在发布了此功能,而其他浏览器仍在实现它。 https://developers.google.com/web/updates/2018/05/bigint

基本上可以使用像这样的文字进行声明

var a = 1n;

var b = BigInt('22222222222222222222222222222222');

数学运算符不会在BigInt和Number之间进行自动转换,因此 1 + 1n 将引发错误。

答案 2 :(得分:0)

您总是可以将总和转换为string,剔除.并获取结果 - 如下所示:

var sum = 2384762348723648237462348;
sum = sum.toString(); // "2.3847623487236483e+24"

// Rip out the "."
sum = sum.substr(0, 1) + sum.substr(2);

// Grab the first 10 characters
var firstTen = sum.substr(0, 10);

答案 3 :(得分:0)

令人惊讶的是,将所有值都粘贴在一个数组中并将它们全部加在一起并且只需要前10位数即可。我必须在我的代码中的某个地方输入一个拼写错误。之前它没有工作。

我确信做这么简单的事情在所有情况下都不会起作用(比如@AlexMcmillan和@zerkms一直在辩论的那些)。我认为最安全的赌注是@bhspencer提到的BigInteger库,但似乎在某些情况下,添加带y位数的前x个有效数字作为缓冲区可能也值得一试。

答案 4 :(得分:0)

我使用数组并使用函数更新所有条目来完成此操作。

function f(a) {
  for (let i = 0; i < a.length - 1; i++) {
      a[i + 1] = a[i + 1] + parseInt(a[i] / 10);
      a[i] = a[i] % 10;
  }
  return a;
}
// remember to init the array with enough elements for all digits
var a = Array(200);
a.fill(0);
a[0] = 1;

Here是带有问题20的代码的JSFiddle。