21の計算方法! (21階乗)迅速に?
How Calculate 21
解決:
符号なし64ビット整数の最大値は18,446,744,073,709,551,615です。 21歳の間! = 51,090,942,171,709,440,000。この種の場合、BigIntegerタイプが必要です。 SwiftでBigIntegerに関する質問を見つけました。そのリンクにはBigInteger用のライブラリがあります。
Swiftで同等のBigInteger?
func factorial(_ n:Int)-> Double {return(1 ... n).map(Double.init).reduce(1.0、*)}
おそらくダブルを使うことを考えましたか?またはNSDecimalNumber?
また、同じ関数を再帰的に呼び出すことは、パフォーマンスの面で非常に悪いことです。
ループを使用するのはどうですか?
let value = number.intValue-1 var product = NSDecimalNumber(value:number.intValue)for i in(1 ... value).reversed(){product = product.multiplying(by:NSDecimalNumber(value:i))}