数组校验和算法 - Python 3

时间:2014-09-11 18:57:50

标签: python arrays algorithm checksum

我一直致力于Code Abbey的问题17。任务是找到数组的校验和。

我希望得到一个解释,为什么答案是正确的,为什么我的解决方案不起作用。

This is the problem:

  

您将获得应计算校验和的数组。按如下方式执行计算:对于数组的每个元素(从头开始),将此元素添加到result变量并将此总和乘以113 - 模10000007取的这个新值应该变为result的下一个值,依此类推。

     

示例:

input data:
6
3 1 4 1 5 9

answer:
8921379
     

所有输入值都在01,000,000,000之间 - 请务必注意计算过程中可能出现的溢出。

这是我的尝试:

a = [int(x) for x in input().split()]

def get_checksum(a):
    seed = 113
    limit = 10000007
    result = 0

    for i in range(len(a) - 1):
        result += a[i]
        result *= seed
        result %= limit

    return result

print(get_checksum(a))

2 个答案:

答案 0 :(得分:1)

如果您将另一个对象添加到数组的末尾,您将得到正确的答案:

a = [3, 1, 4, 1, 5, 9, "X"]

def get_checksum(a):
    seed = 113
    limit = 10000007
    result = 0

    for i in range(len(a) - 1):
        result += a[i]
        result *= seed
        result %= limit

    return result

print(get_checksum(a))
#>>> 8921379

所以Peter de Rivaz说这是因为你错过了最后一个元素。拿凯文的答案,然后循环遍历a中的项目:

a = [3, 1, 4, 1, 5, 9]

def get_checksum(a):
    seed = 113
    limit = 10000007
    result = 0

    for item in a:
        result += item
        result *= seed
        result %= limit

    return result

print(get_checksum(a))
#>>> 8921379

答案 1 :(得分:0)

def get_checksum(a):
    seed = 113
    limit = 10000007
    result = 0

    for i in range(len(a)):
        result += a[i]
        result *= seed
        result %= limit

    return result

    print(get_checksum([3, 1, 4, 1, 5 , 9]))

打印出8921379