Yingfa
Yingfa

Reputation: 55

Javascript - Project Euler Solution 8, code not working properly

I'm a beginning programmer, and am trying to solve Project Euler Problem 8 (finding the thirteen adjacent digits with the greatest product). Here is my code:

var n = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";

function multiplyNext13(a){
    var result = 1;
    for (i = a; i < a + 13; i++){
        result *= Number(n[i]);
    }
    return result;
}

function getAnswer(){
    var answer = 5000940;
    for (i = 0; i < 988; i++){
        if (multiplyNext13(i) > answer){
            answer = multiplyNext13(i);
        }
    }
    document.getElementById("a").innerHTML = answer;
}

The function getAnswer() keeps giving me answer = 0, but I don't know what's wrong. I tested the function multiplyNext13() and I believe it's working properly.

What's wrong with this code? Why isn't it working?

Upvotes: 4

Views: 316

Answers (1)

Denys S&#233;guret
Denys S&#233;guret

Reputation: 382194

You have only one variable i in your whole program, because you failed to declare it with var.

This means each time you enter the loop in multiplyNext13 you also advance the loop in getAnswer.

This also means the value you set in answer = multiplyNext13(i); isn't the same that the one you just computed in if (multiplyNext13(i) > answer){ (note that this double computation also makes your code slower).

Change

for (i = a; i < a + 13; i++){

to

for (var i = a; i < a + 13; i++){

(and of course the same for the other loop).

Once I fix that, I get this result : 23514624000

Demonstration

Upvotes: 7

Related Questions