【问题标题】:Project Euler #13 understandning (Python)Project Euler #13 理解(Python)
【发布时间】:2013-11-21 15:24:49
【问题描述】:

问题 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)

【问题讨论】:

标签: python


【解决方案1】:

你误读了这个问题。

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

【讨论】:

  • 每个数字50位,这样长度的数字有一百个。
  • @RomanDryndik 感谢您指出这一点。我已经更新了我的答案。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我认为您正确理解了这个问题,但在 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

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多