In this blog post we will be looking at problem 8 of Project Euler and we will program a solution in Java.
The problem of Project Euler found here, below is the problem for quick lookup.
The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.
<– very long number omitted –>
Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
-Project Euler problem 8
So we need to loop over the 1000-digit number to find the 13 adjacent digits with the greatest product.
We start by declaring a long to hold the highest sum of the 13 adjacent numbers setting it to 0. Then we declare a for loop with ‘pos’ as it’s loop counter which we increment by one every loop while ‘pos’ is below 988.
String number = "73167176531330624919225119674426574742355349194934" +
"96983520312774506326239578318016984801869478851843" +
"85861560789112949495459501737958331952853208805511" +
"12540698747158523863050715693290963295227443043557" +
"66896648950445244523161731856403098711121722383113" +
"62229893423380308135336276614282806444486645238749" +
"30358907296290491560440772390713810515859307960866" +
"70172427121883998797908792274921901699720888093776" +
"65727333001053367881220235421809751254540594752243" +
"52584907711670556013604839586446706324415722155397" +
"53697817977846174064955149290862569321978468622482" +
"83972241375657056057490261407972968652414535100474" +
"82166370484403199890008895243450658541227588666881" +
"16427171479924442928230863465674813919123162824586" +
"17866458359124566529476545682848912883142607690042" +
"24219022671055626321111109370544217506941658960408" +
"07198403850962455444362981230987879927244284909188" +
"84580156166097919133875499200524063689912560717606" +
"05886116467109405077541002256983155200055935729725" +
"71636269561882670428252483600823257530420752963450";
long highest_sum = 0;
for (int pos = 0; pos < 988; pos++){
long sum = 1;
for (int i = 0; i < 13; i++){
sum *= Character.getNumericValue(number.charAt(pos + i));
}
if (sum > highest_sum){
highest_sum = sum;
}
}
System.out.println(highest_sum);
Inside the for loop we declare another long to hold the sum of the current 13 adjacent numbers which we set to 1(if you would set it to 0 then multiplication would always return 0). We then declare another for loop which loops 13 times getting the current and the next 12 numbers. For every neighbor we multiply it against the current value of sum. Once this is done we go to the if where we check if the current neighbors(‘sum’) have a higher value than the highest one(‘highest_sum’) we have found. If it does we set ‘highest_sum’ to the new value in sum. Once we have looped over all positions we print the value of ‘highest_sum” and we are done.
With the greatest product being: 23514624000
Check out the ‘Project Euler in Java’ page for more solutions!
That was Project Euler problem 8 in Java!