Find the greatest product of five consecutive digits in the 1000-digit number.

Project Euler Problem 8: Find the greatest product of five consecutive digits in the 1000-digit number.

Solution: The problem input is a 1000digit number. We put it in a file for reading our input number. Here is our problem input:

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450

We read it as follows:


Java Program to get an input string from a file containing 1000-digit number.


package reader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ReadInputFile {
public String readInputFile(){
File file = new File("C:/Input.txt");
StringBuffer contents = new StringBuffer();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String text = null;
// repeat until all lines is read
while ((text = reader.readLine()) != null) {
/* Read file line by line and append
to contents i.e. a StringBuffer */
contents.append(text).
append(System.getProperty("line.separator"));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return (contents.toString());
}
public int[][] numArrayFromString(String content){
int numbers[][] = new int[20][50];
int j=0;
String temp;
for(String line:content.split("n")){
for(int i=0;i<50;i++){
temp = line.substring(i, i+1);
numbers[j][i] = Integer.parseInt(temp);
}
j++;
}
return numbers;
}
}

Java Program to process input string from string containing 1000-digit number.


package evaluator;
public class ProcessInput {
public int calculateGreatestProduct(int [][] numbers){
int product=0, largest=0;
for(int i=0;i<20;i++){
for(int j=0;j<46;j++){
product = numbers[i][j] * numbers[i][j+1] *
numbers[i][j+2] * numbers[i][j+3] * numbers[i][j+4];
if(product > largest){
largest = product;
}
}
}
return largest;
}
}

Java Program to to display greatest product of five consecutive digits in the 1000-digit number.


package display;
import evaluator.ProcessInput;
import reader.ReadInputFile;
public class DisplayResult {
public static void main(String [] args){
ReadInputFile read = new ReadInputFile();
String content = read.readInputFile();
int [][] num = read.numArrayFromString(content);
ProcessInput process = new ProcessInput();
int result = process.calculateGreatestProduct(num);
System.out.println("The greatest product is: " + result);
}
}

Enjoy coding !!!

Leave a Reply

Your email address will not be published. Required fields are marked *