aliatlii
aliatlii

Reputation: 45

ProjectEuler 8: Is my code wrong or Is it their false?

I was working on Problem 8 and I've come up with a solution that works fine for four and five consecutive digits, giving the answers 5832 and 40824 respectively, although it seems to be failing when I try thirteen digits. The following is my code:

public static void main(String[] args){
    String s="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
    int num=1;
    int res=0;
    for(int i=0;i<=s.length()-13;i++){
        num=1;
        for(int j=0;j<13;j++)
            num=num*Integer.parseInt(s.substring(i+j,i+j+1));
        if(res<num)
            res=num;
    }
    System.out.println(res);
}

I get "2091059712" as a result and ProjectEuler does not accept it.

What is the problem? Either my code is wrong or they did miscalculation.

If my code is wrong, can you help me to fix it?

Upvotes: 2

Views: 356

Answers (2)

Cynic Wild
Cynic Wild

Reputation: 68

Try import java.math.BigInteger; and use the BigInteger call to do your math. Mike is totally correct here.

Upvotes: 1

Michael Yaworski
Michael Yaworski

Reputation: 13483

You're problem is that you're getting an integer overflow. The answer is actually larger than the largest possible value of a 32-bit signed integer in Java (the int variable type).

Just so you know, the maximum value of the integer is 231-1 = 2147483647.

To fix this, just change your num and res types to long so that it will not overflow (overflow means that if the number is larger than the maximum value, it will overflow to the minimum value and count from there).

Solution:

Change

int num=1;
int res=0;

to

long num=1;
long res=0;

I can verify that you get the correct answer.

Upvotes: 2

Related Questions