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))}