Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript - Project Euler Solution 8, code not working properly

Tags:

javascript

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?

like image 805
Donny Chan Avatar asked Mar 17 '23 04:03

Donny Chan


1 Answers

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

like image 134
Denys Séguret Avatar answered Mar 25 '23 12:03

Denys Séguret