Reputation: 45
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
Reputation: 68
Try import java.math.BigInteger;
and use the BigInteger call to do your math. Mike is totally correct here.
Upvotes: 1
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