我一直试图以多种方式解决以下问题(递归地,使用do while循环的Go版本和for循环)。但是他们每个人都陷入无限循环。我尝试在JavaScript中使用相同的解决方案,并且效果很好。有人可以帮我理解为什么下面的解决方案无法在无限循环中工作吗?
// Write a function that takes in a number and returns the next number that is divisible by 7
package main
func solution9(num int) int {
var done bool = false
var result int = 0
for i := 1; done != true; i++ {
if (num + i % 7 == 0) {
result = num + i
done = true
}
}
return result
}
答案 0 :(得分:10)
您的问题是运算符优先级。 %运算符的优先级高于+运算符,因此如果您的num
为10,则您的测试在功能上是
10 + (0 % 7) == 0 => false (10)
10 + (1 % 7) == 0 => false (11)
10 + (2 % 7) == 0 => false (12)
等
很显然,对于任何num
> 0,您将永远无法满足该条件。将测试更改为(num+i)%7 == 0
,您应该会发现它可以正常工作。