问题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)
答案 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]