The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.
73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450
Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
Korean: http://euler.synap.co.kr/prob_detail.php?id=8]
English: https://projecteuler.net/problem=8
- Tool: Visual Studio Code
- SDK: Java SDK 1.8.0_181-b13
- Language: Java
javac Problem8.javajava Problem8- Open folder "Problem8" by Visual Studio Code
- Check out settings - launch.json
- Press F5 to debug start
- 1000자리 숫자에 대해 13자리씩 끊어서 읽어야 하므로 index 0 부터 해서 length - 12 까지 도는 for loop을 만든 후에
- 안에서 도는 for loop은 시작 index로 부터 13자리 까지 읽을 수 있도록 13번 loop를 돈다.
- nested loop 안에서 한 자리 숫자를 읽어들이면 그걸 숫자로 바꾼 후에 계속 곱셈을 하는 식을 만든다.
- 여기서 13자리 중 하나라도 0이 나오면 그 이후의 곱셈은 진행해봤자 0이 되므로 if문으로 체크해서 break를 걸어준다. 이후 진행할 12자리 수의 13자리 곱셈은 진행해도 의미 없으므로 i index를 12를 더해 건너뛴다. 나는 이 부분이 이 알고리즘에서 제일 중요한 포인트라고 생각한다.
- 또 13자리 중 하나라도 1이 나오면 항등원이므로 곱셈의 의미가 없다. 그러므로 if문으로 체크해서 continue로 다음 숫자를 구한다.
- 13자리의 곱셈을 구하면 이전에 구한 maxNumber중 어느 수가 더 큰지 Math.max() 함수를 통해 구한다.
- 주의: 곱한 수가 int로 표현할 수 있는 범위를 넘어가므로 long type으로 구해야 한다.