2013-11-21 30 views
4

問題13:http://projecteuler.net/problem=13項目歐拉#13 understandning(Python)的

制定出以下一個百50位數字的總和的前十位。 那麼,問題總數是5000位數,答案是結果中的前10位數?

bignumber = list of the 5000 digits 
sum(bignumber) = abcdefghijklmnopqrst...  
answer = abcdefghj 

嗯,我做這個sum(bignumber) = 22660(甚至不是10位)......當

有我誤解了問題?

def foo(): 
    with open ("bignumber", "r") as myfile: 
     data=myfile.read().replace('\n', '') 
    data = map(long, data) 
    datasum = sum(data) 
    return (datasum) 
+0

的問題是要總結的100個號碼,不總結自己的數字。 –

+1

這是12 + 34和1 + 2 + 3 + 4之間的差異。 –

+1

請注意,這個問題在Python中更容易一些,因爲整數沒有最大值:http://stackoverflow.com/questions/4581842/python-integer-ranges,所以你不必處理溢出。 – colcarroll

回答

3

你在誤讀這個問題。

他們給你100個你需要總結的數字,每個數字都是50位數字(也就是X * 10^50的數量級)。 50位數部分在那裏,所以你不能使用傳統的int/long數據類型(正如JLLAgrange指出的,這部分不應該是python的問題,因爲整數沒有最大值)。

+0

每個數字的長度是50個數字,有一百個這樣的長度。 –

+0

@羅曼德林迪克感謝您指出了這一點。我已經更新了我的答案。 –

0

每個數字是50個數字長(即,每行是一個數字)。你可以試試

def foo(): 
    with open ("bignumber", "r") as myfile: 
     data=myfile.read() 
    data = map(int, data) 
    datasum = sum(data) 
    return datasum 
0

我認爲你正確理解了這個問題,但在Python中錯誤地應用了。

你正在做的:

with open ("bignumber", "r") as myfile: 
    data=myfile.read().replace('\n', '') 
    #Now `data` is a big huge string of digits 
data = map(long, data) 
#Now data is an array of 5000 elements of each digit. 
#And then you are trying sum this array of digits. 

你需要什麼:

with open(..) as fileObj: 
    data = [long(line.strip()) for line in fileObj] 

Look at this example