【问题标题】:I am getting an error in Swift 4 as follows :我在 Swift 4 中遇到如下错误:
【发布时间】:2018-08-02 15:38:04
【问题描述】:

执行被中断,原因:

EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)。

进程一直停留在中断点,使用thread return -x返回表达式求值前的状态

import UIKit

func numberWhosePrimeFactorIsNeeded(_ number : Int) {
    var a = 1

    for primefactor in 2...600851475143 where number % primefactor == 0 {
        let c = a * primefactor

        if c == 600851475143 {
            print(primefactor)
        } else {
            a = c
        }
    }
}
numberWhosePrimeFactorIsNeeded(600851475143)

只有当我输入var a >=1; if a = 0 时才会出现错误,但它不会出现。即使错误存在,代码也会运行到最后。

【问题讨论】:

    标签: swift xcode swift4 prime-factoring


    【解决方案1】:

    你的 Int 溢出了。这是(a, primefactor) 采用的路径:

    1 71
    71 839
    59569 1471
    87625999 6857
    6857  // <-- a prime factor gets printed, then it continues....
    87625999 59569
    5219793134431 104441
    545160414753108071 486847
    

    545160414753108071 * 486847 太大而无法放入 Int。

    【讨论】:

    • 那么解决办法是什么。当我尝试使用 Int64 时也会发生同样的错误。请帮忙
    • 我还放了一个 if else 语句,这样在我得到 6857 后它就不会运行
    • @DrexFranco 你不能在Int64 中做这么大的数学运算(Int 与 64 位平台上的Int64 大小相同)。你需要一个 BigInt 类型; Swift 在标准库中没有。你可以看看像 osxgmp (github.com/githotto/osxgmp) 或 BigInteger (github.com/kirsteins/BigInteger) 这样的项目。可能还有其他人。
    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 2011-07-12
    • 2016-06-02
    • 1970-01-01
    • 2018-01-29
    • 2022-01-24
    • 2012-05-30
    • 1970-01-01
    相关资源
    最近更新 更多