我一直试图以多种方式解决下面的问题(递归地,使用Go-version of do while循环,并使用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
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ald 10
您的问题是运营商优先级.%运算符的优先级高于+运算符,因此如果您的运算符num为10,那么您的测试在功能上是:
10 + (0 % 7) == 0 => false (10)
10 + (1 % 7) == 0 => false (11)
10 + (2 % 7) == 0 => false (12)
Run Code Online (Sandbox Code Playgroud)
等等
显然,对于任何num> 0,你永远不会满足条件.将测试更改为(num+i)%7 == 0,您应该发现它按预期工作.