2016-09-28 5 views
0

私はSwiftを初めて使っています。私は基数10の数字を別の基数に変換するようなものを作ろうとしていました。私は、基数と数値の最大指数値を求める関数を作ることから始めました。たとえば、数が26で底が5の場合、最大指数は2になります。私はプログラムを作成しましたが、常にエラーになります。 Double(num/exponentedBase)と何か関係があるかもしれないような気がしますが、わかりません。最後に、これを行うより良い方法がありますか?助けてください。 enter image description hereSwiftの最大の共通指数

答えて

0

ファンクションの2行目の除算と組み合わせて1行目のxor演算子が例外を引き起こしています。

xor演算子は、入力ビットが異なる場合にビットが1に設定され、入力ビットが同じ場合に0に設定される新しい番号を返します(https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html、ビット単位XOR演算子の章を参照)。

あなたの変数「exponentedbase」は0にすることができ、例外を引き起こす0を介して分割しようとする可能性があります。あなたはNUM 12とベース2とあなたのgreatestCommonExponent関数の値を印刷するとき

は、次のような結果が得られます。

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、章 "早期終了")

編集: スウィフトで^オペレータは、XOR関数です。ステートメント2^2は、数値をビット単位で比較します。 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) 
さらに参考のために

10 XOR 10 = 00 

あなたは捕虜機能を持つようにしたい場合は、あなたがこのような何かを行う必要がありますhttps://en.wikipedia.org/wiki/Exclusive_orまたはhttps://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html

に従ってください

12塩基2の結果は、3

+0

私はまだ混乱しています。 2番目の呼び出しでは、指数ベースはどのように0ですか?指数部の基数は2^2で、4に等しくなければなりません。 –

+0

^は指数ではなく_xor_演算子です。 pow関数を使いたい場合は、おそらくこれが役に立ちます:http://stackoverflow.com/questions/24196689/how-to-get-the-power-of-some-integer-in-swift-language?answertab= votes#tab-top – mbachm

+0

私は演算子を変更しましたが、それでもゼロを返します。私はチェックするためにすべての値を印刷し、それらはすべて正しいものでした。 if文を使ったものと思われます。 –

関連する問題