gpt4 book ai didi

Swift 3.0 在模运算后返回不正确的值

转载 作者:行者123 更新时间:2023-11-28 15:38:56 26 4
gpt4 key购买 nike

为什么以下函数返回整数 2000,即使它不能被数字 3、6、7、9 整除?

var counter = 1000

func divisibleByAllTenNumbers() -> Int{
for _ in 1...counter {
if counter % 2 == 0 && counter % 3 == 0 &&
counter % 4 == 0 && counter % 5 == 0 &&
counter % 6 == 0 && counter % 7 == 0 &&
counter % 8 == 0 && counter % 9 == 0 &&
counter % 10 == 0 {

break
}
else {
counter = counter + 1
}
}

return counter
}

2000 显示为输出,即使预期的数字是 2520。

可能的原因是什么?

最佳答案

您对 counter 的使用令人困惑。它从 1000 开始,因此 for 循环迭代 1000 次 (1...1000)。但是 counterfor 循环中从 1000 递增到 1999。因此,您的 if 语句仅检查 1000 到 1999 之间的值,最后一个增量将其设置为 2000(但由于循环结束而未检查该值。

因此没有值匹配,counter 的最终值 (2000) 被返回。

我会更改 for 循环以使其更清晰。如果要检查 2000 - 3000 范围内的数字,请说明:

for counter in 2000...3000 {

并删除 var counter = ... 行。

您可能还想更改返回值以指示未找到匹配项。这将是可选的一个很好的用途。

我还会为您的函数提供参数以指定范围。

func divisibleByAllTenNumbers(_ from: Int, to: Int) -> Int? {
for counter in from...to {
if counter % 2 == 0 && counter % 3 == 0 &&
counter % 4 == 0 && counter % 5 == 0 &&
counter % 6 == 0 && counter % 7 == 0 &&
counter % 8 == 0 && counter % 9 == 0 &&
counter % 10 == 0 {

return counter
}
}

return nil
}

if let result = divisibleByAllTenNumbers(2000, to: 3000) {
print("Found result of \(result)")
} else {
print("No match found")
}

输出:

Found result of 2520

关于Swift 3.0 在模运算后返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43972087/

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