gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:23:56 29 4
gpt4 key购买 nike

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<<31, 1<<32) 范围内的值到int32 .

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

a := int64(1 << 31)
b := int64(1<<32 - 1)
// int32(a) == -2147483648
// int32(b) == -1

根据您的算法应该如何工作,您需要扩大范围以使用 int64 ,或使用 uint32 ,这将截断该值但保持正数。

关于algorithm - 为什么代码在 Codility 测试用例中返回负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30595330/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com