是否有任何JavaScript解释器可以处理非常大的数字?

时间:2010-10-29 15:10:40

标签: javascript bignum

  

可能重复:
  Is there a bignum library for JavaScript?
  Strange syntax of Number methods in JavaScript

我刚写了一些代码来找出Project Euler问题。

我一直在......

  

未捕获的SyntaxError:意外的标记ILLEGAL

我无法在我的代码中看到语法错误...

我使用的数字是1000位数。我在Chrome控制台中运行

Number.MAX_VALUE >  7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

得到false。长号。

是否有可以运行我的代码的解释器?

如果需要,这是代码......

var num = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450.toString();

var max = 0,
    length = num.length;

for (var i = 0; i < length; i++) {
     
     var consecTotal = 1,
         limit = i + 5;
      
      for (var j = i; j < limit; j++) {
        consecTotal *= parseInt(num.substr(j, 1), 10);
      }
      
      max = Math.max(max, consecTotal);
      
}

console.log(max);

问题是找到最大数字,它是5个连续数字的乘积。我不会逐字逐句地输入,因为我觉得Project Euler对网上发布的答案感到皱眉(我甚至不确定我的工作是否可行)。

我转向JavaScript,因为我不确定如何设置int来处理C中的数字。

3 个答案:

答案 0 :(得分:4)

实际解释Uncaught SyntaxError: Unexpected token ILLEGAL

原因实际上是......

...20752963450.toString();
              ^-------- ...the dot after a number is treated as a decimal point
                        Therefore this doesn't make sense.
                        But if you add a space in front of the dot, then it will work because
                        now JavaScript uses it to access the toString() method.

12323 .toString() // this will work as you'd expect it to if you come from Ruby or the like

但是,如果你添加空格num将是无限的。所以你必须看看awoodland对BigNum实现的回答。

答案 1 :(得分:2)

听起来你正在寻找一个大数学课。似乎Javascript有一个,如果你想用C做,你可以使用gmp

答案 2 :(得分:0)

首先,如果要将其用作字符串,则num变量应该是正确的字符串文字。你似乎在做什么。我从未见过你试图在那里使用的符号,我无法在Chrome或IE中使用它。只需使用:

var num = '73167176531330....';

其次,你的内循环永远不会终止。 j总是小于j + 5.你是否意味着j&lt;我+ 5?

第三,你需要让你的外环只去i&lt;长度 - 4.否则当我接近结束长度时,你将超越然后在内循环中结束你的“num”字符串。

如果我做出这些改动,我会得到答案。我不知道你是否正在寻找答案。