views:

68

answers:

3

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.

+1  A: 

Sounds like you're looking for a big num class. It seems there's one for Javascript and if you want to do it in C you could use gmp.

awoodland
+4  A: 

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.

Ivo Wetzel
Thanks, I didn't realise that at all. +1
alex
+1 for me failing to spot that problem!
awoodland
You can also use `(123).toString()` or `123.0.toString()` http://stackoverflow.com/q/1860998/54420
Josh Stodola
@Josh Indeed, but `()` looks a bit redundant and the `.0` looks quite strange to me. Although people who don't know about the problem might just strip out any of the three because they think it's redundant / a typo.
Ivo Wetzel
Is `200 + ''` a good solution to [cast to string](http://jsfiddle.net/y2QbQ/)?
alex
A: 

First, your num variable should be a proper string literal if you want to use it as a string. Which is what you appear to be doing. I've never seen the notation you are trying to use there and I can't get it to work in Chrome or IE. Just use:

var num = '73167176531330....';

Second, your inner loop is never going to terminate. j will always be less than j + 5. Did you perhaps mean j < i + 5?

Third, you'll need to make your outer loop only go to i < length - 4. Otherwise you are going to overrun then end of your "num" string in your inner loop when i gets close to the end length.

If I make those changes I get an answer. I don't know if it is the answer you are seeking.

DMKing
Inner loop code updated already.
Roatin Marth
Looks like you changed the code a bit before I posted to address my second issue. :)
DMKing
I don't think it matters about overrunning when I use `parseInt()`. Those `undefined` should be cast to `0`. This will make that equation 0, which is fine because none of those numbers will match the requirements.
alex