为什么代码在Codility测试用例中返回负值?

时间:2015-06-02 11:52:56

标签: algorithm go

Codility问题和测试用例显示在:here

用golang编写的代码:

func Solution(A []int, B []int) []int {
    result := make([]int, len(A))
    step := make([]int, len(A)+1)
    step[0] = 1
    step[1] = 1
    for i := 2; i <= len(A); i++ {
        step[i] = step[i-1] + step[i-2]
    }
    for i := 0; i < len(A); i++ {
        result[i] = int(int32(step[A[i]]) % int32(math.Pow(2, float64(B[i]))))
        // result[i] = step[A[i]] & (1<<uint(B[i]) - 1)
    }
    return result
}

result[i] = step[A[i]] & (1<<uint(B[i]) - 1)通过所有案件。但result[i] = int(int32(step[A[i]]) % int32(math.Pow(2, float64(B[i]))))result[i] = step[A[i]] % int(math.Pow(2, float64(B[i])))会产生一些负数。

似乎有些东西溢出了。有人会知道原因吗?谢谢!

1 个答案:

答案 0 :(得分:0)

对于某些输入,您需要将int32范围内的值转换为a := int64(1 << 31) b := int64(1<<32 - 1) // int32(a) == -2147483648 // int32(b) == -1

http://play.golang.org/p/6HYPXY9Kjb

int64

根据算法的工作方式,您需要扩展范围以使用uint32,或使用'item' in s for s in mylist ,这将截断值但保持为正值。