私はSwiftを初めて使っています。私は基数10の数字を別の基数に変換するようなものを作ろうとしていました。私は、基数と数値の最大指数値を求める関数を作ることから始めました。たとえば、数が26で底が5の場合、最大指数は2になります。私はプログラムを作成しましたが、常にエラーになります。 Double(num/exponentedBase)と何か関係があるかもしれないような気がしますが、わかりません。最後に、これを行うより良い方法がありますか?助けてください。 Swiftの最大の共通指数
答えて
ファンクションの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
- 1. NTFS共有最大ユーザー数
- 2. 共通変数の最適化
- 3. CMakeの2つの文字列の最大共通接頭辞
- 4. 複数の行に共通する最大の日付を選択
- 5. swift 2.3とXcode8.1の共通暗号
- 6. 複数シーケンスアラインメント(最長共通部分シーケンス)?
- 7. バイナリツリーの最初の共通祖先
- 8. Apache共通SimplexSolver ObjectiveFunctionは行列の値の合計を最大化する
- 9. 最低共通共通点を見つける
- 10. 最も長い共通部分列の数
- 11. 最低の共通倍数がCで倍精度になる
- 12. 2つの配列で共通する最大要素を探しますか?
- 13. 複数のクラスオブジェクトを共有し、共通の変数
- 14. Python argparse:2つの共通の位置指定引数を必要とする
- 15. 指定された桁のブロックから最大可能数C++
- 16. PySparkで最大のパーケットブロックサイズを指定
- 17. アップルが許可するプッシュ通知の最大許容数
- 18. 複数のコントローラ間の共通のメソッド
- 19. 最大の秒数
- 20. contact_idの最大数
- 21. SWIFT 2.2 DatePickerの最小時間と最大時間
- 22. オブジェクト指向の共通メソッド:インタフェース、抽象的なものなど
- 23. Jlistの最大数選択された要素の最大数
- 24. 複数のアンドロイドタブ間で共通のデータ
- 25. 共通モジュール用の複数のインポートpy32
- 26. 複数のビュー間の共通モデル
- 27. 流星共通コードの複数のコレクション
- 28. CythonのFortran共通変数へのアクセス
- 29. 最長共通部分シーケンスPython 2関数
- 30. MediaPlayer変数の最大数
私はまだ混乱しています。 2番目の呼び出しでは、指数ベースはどのように0ですか?指数部の基数は2^2で、4に等しくなければなりません。 –
^は指数ではなく_xor_演算子です。 pow関数を使いたい場合は、おそらくこれが役に立ちます:http://stackoverflow.com/questions/24196689/how-to-get-the-power-of-some-integer-in-swift-language?answertab= votes#tab-top – mbachm
私は演算子を変更しましたが、それでもゼロを返します。私はチェックするためにすべての値を印刷し、それらはすべて正しいものでした。 if文を使ったものと思われます。 –