2017-10-06 74 views
-3

的歐拉計劃的problem 8狀態:最大的產品

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?

我知道有對本練習中提供的各種解決方案,但我並不想破壞自己。我有一個特定的算法:計算前十三個數字d_1,...,d_13的乘積,然後向右移動並計算d_2,...,d_14的乘積,如果該乘積大於之前的產品,這應該是我們新的最大的產品,等等,直到我們到達數字的末尾。但是我不明白我會如何在Python中去做這樣的事情。儘管我很天真,但我試圖複製整個1000位數字,但是,我想這不是我應該在這裏做的。

但是我怎麼能夠用這個數字呢?

+0

將該數字讀取爲一個字符串並切分字符串以獲取所需的部分。 – interjay

回答

2

要在讀取數量,你可以使用Python的隱含string literal concatenation的字符串:

num = (
    "73167176531330624919225119674426574742355349194934" 
    "96983520312774506326239578318016984801869478851843" 
    "85861560789112949495459501737958331952853208805511" 
    ... 
) 

一旦你的字符串,可以在需要的長度的成批讀出數字和計算產品。爲此,reduce()函數可能會有用:

from functools import reduce 

series_len = 13 
max_product = 0 

for i in range(len(num) - series_len): 
    digits = num[i:i+series_len] 
    product = reduce(lambda x, y: x*int(y), digits, 1) 

    if product > max_product: 
     max_product = product 
+0

謝謝!但是,如何在沒有收到錯誤信息的情況下閱讀號碼?例如,「」「....」「」不起作用。它給出ValueError:以int 10爲基數的無效字面值:'\ n' – Julian

+0

使用Python連接相鄰字符串的事實(請參閱更新)。 –

+1

感謝您的幫助!雖然我真的不明白我應該得到什麼。 – Julian