的Codility问题和测试用例示于:here为什么代码在Codility测试用例中返回负值?
写入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])))
产生一些负数。
看起来有些东西溢出。有人会知道原因吗?谢谢!
您是否使用了与您提供的链接中给定的A和B完全相同的数组?如果A和B都由小的正整数组成,我看不到结果为负的任何理由。 –
示例数组结果OK。但是在提交代码后,它在某些情况下失败了。不幸的是,codilty并没有显示完全的测试用例,所以我不知道在这种情况下使用的数组。奇怪! – victor1ee