【问题标题】:Greatest Common Exponent in SwiftSwift 中的最大公约数
【发布时间】:2016-09-28 04:32:30
【问题描述】:

我是 Swift 的新手,我正在尝试做一些东西,可以将任何以 10 为基数的数字转换为不同的基数。我首先创建了一个函数,它可以找到一个基数和一个数字的最大指数值。例如,如果数字是 26,底数是 5,则最大指数是 2。我创建了这个程序,但它总是给我一个错误。我觉得它可能与 Double(num/exponentedBase) 有关,但我不确定。最后,有没有更好的方法来做到这一点。请帮忙。

【问题讨论】:

    标签: swift function integer exponent


    【解决方案1】:

    第一行中的 xor 运算符与函数第二行中的除法相结合导致异常。

    xor 运算符返回一个新数字,其位在输入位不同时设置为 1,在输入位相同时设置为 0(参见 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html,按位异或运算符一章)。

    因此,您的变量“exponentedbase”可以为 0,并且您可能试图除以 0,从而导致异常。

    当您以 num 12 和底数 2 打印最大公共指数函数的值时,您会得到以下结果:

    first call:
    num: 12
    base: 2
    exponent: 1
    exponentedbase: 3
    
    second call:
    num: 12
    base: 2
    exponent: 2
    exponentedbase: 0
    

    您应该添加一个保护语句来保存您的代码。 (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ControlFlow.html#//apple_ref/doc/uid/TP40014097-CH9-ID120,“提前退出”章节)

    编辑: Swift 中的 ^ 运算符是 XOR 函数。语句 2^2 将按位比较数字。

    10 XOR 10 = 00
    

    如需进一步参考,请关注https://en.wikipedia.org/wiki/Exclusive_orhttps://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html

    如果你想拥有一个 pow 函数,你应该这样做: How to get the Power of some Integer in Swift language?

    这应该适合你:

    func greatestCommonExponent(num: Int, base: Int, exponent: Int = 1) -> Int {
        let exponentedbase = base^^exponent
        let value = Double(num/exponentedbase)
        if value > 1 {
            return greatestCommonExponent(num: num, base: base, exponent: exponent+1)
        }
        if value == 1 {
            return exponent
        } else {
            return exponent-1
        }
    }
    
    precedencegroup PowerPrecedence { higherThan: MultiplicationPrecedence }
    infix operator ^^ : PowerPrecedence
    func ^^ (radix: Int, power: Int) -> Int {
        return Int(pow(Double(radix), Double(power)))
    }
    
    greatestCommonExponent(num: 12, base: 2)
    

    12 base 2 的结果是 3

    【讨论】:

    • 我还是一头雾水。在第二次调用中,指数如何以 0 为底?指数基数应为 2^2,即等于 4。
    • ^ 是 xor 运算符,而不是指数。如果你想要一个 pow 函数,也许这会有所帮助:stackoverflow.com/questions/24196689/…
    • 我更改了运算符,但它仍然只返回零。我打印了所有要检查的值,它们都是正确的。这似乎与 if 语句有关。
    • 非常感谢。这真的很有帮助。我发现有两个问题。第一个是我修复的幂函数。第二个是当 x > 1 时我没有返回最大的CommonExponent()。这就是为什么我的函数仍然返回 0。再次,非常感谢。
    • 不客气。如果您能接受我的回答,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多