项目欧拉#13理解(Python)

时间:2013-11-21 15:24:50

标签: python

问题13:http://projecteuler.net/problem=13

计算出以下一百个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)

3 个答案:

答案 0 :(得分:3)

你误解了这个问题。

他们给你100个你需要求和的数字,每个数字都是50位数(也就是X * 10 ^ 50的数量级)。那里有50位数的部分,所以你不能只使用传统的int / long数据类型(正如JLLAgrange指出的那样,这部分不应该是python的问题,因为整数没有最大值)。

答案 1 :(得分:0)

每个数字长度为50位(即,每行是一个数字)。你可以试试

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

答案 2 :(得分: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