Here’s problem eight.

*Question: Find the greatest product of five consecutive digits in the 1000-digit number. (a very large number follows)*

This problem is fairly straightforward. I initially converted the number into a list, but then I realized that strings are also iterable! This made the code slightly simpler.

Basically we pull substrings out of the main string (the holds the big number), and find the product of its digits. If the product is greater than the previously largest product, we overwrite it.

So here it is:

n = '73167176531330624919225119674426574742355349194934\ 96983520312774506326239578318016984801869478851843\ 85861560789112949495459501737958331952853208805511\ 12540698747158523863050715693290963295227443043557\ 66896648950445244523161731856403098711121722383113\ 62229893423380308135336276614282806444486645238749\ 30358907296290491560440772390713810515859307960866\ 70172427121883998797908792274921901699720888093776\ 65727333001053367881220235421809751254540594752243\ 52584907711670556013604839586446706324415722155397\ 53697817977846174064955149290862569321978468622482\ 83972241375657056057490261407972968652414535100474\ 82166370484403199890008895243450658541227588666881\ 16427171479924442928230863465674813919123162824586\ 17866458359124566529476545682848912883142607690042\ 24219022671055626321111109370544217506941658960408\ 07198403850962455444362981230987879927244284909188\ 84580156166097919133875499200524063689912560717606\ 05886116467109405077541002256983155200055935729725\ 71636269561882670428252483600823257530420752963450' result = 0 factors = [] for x in range(0, 996): # tests from n[0] to n[995] product = 1 digits = n[x:x+5] # digits is a substring of 5 consecutive digits in n for d in digits: product *= int(d) if product > result: result = product factors = list(digits) print(result, factors)

The number is stored as a string in the variable* n*. We initialize two variables, *result*, which will be the largest product, and *factors*, a list that will hold the factors of that number (just for fun). Since we are testing numbers in 5-digit-long “chunks” (substrings), the last “chunk” we need to test is the last five digits, or the positions *n[995]* to *n[999]*. So we set a for loop to do this.

The product is set to 1 every time we iterate, and digits is the substring starting at position *x* and ending (not including) at position *x + 5*. This 5-digit substring is stored in digit and we iterate through it, multiply the product by each of its digits. We then check to see if the product is greater than the previously largest product (initialized to zero), and if true, we overwrite it and store the digits as a list in factors.

When it finishes we print the result.

*Answer: 40824 (9*9*8*7*9)*