Search code examples
javascriptbignum

is there any JavaScript interpretor that can handle very large numbers?


Possible Duplicates:
Is there a bignum library for JavaScript?
Strange syntax of Number methods in JavaScript

I just wrote some code to figure out a Project Euler question.

I kept getting...

Uncaught SyntaxError: Unexpected token ILLEGAL

I couldn't see the syntax error in my code...

The number I'm using is 1000 digits long. I ran in Chrome's console

Number.MAX_VALUE >  7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

And got false. Bummer.

Is there a interpreter that can run my code?

Here is the code if needed...

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);

The question is to find the largest number that is the product of 5 consecutive numbers. I won't type it word for word, as I think Project Euler frowns upon answers being posted online (I'm not even sure mine may work yet).

I turned to JavaScript because I wasn't sure how to set up an int to handle the number in C.


Solution

  • To actually explain the Uncaught SyntaxError: Unexpected token ILLEGAL.

    The cause of this is actually that...

    ...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
    

    Still, if you add the space num will be infinity. So you'll have to look at awoodland's answer for a BigNum implementation.