0

次のコードがあり、20 までの階乗値を取得したいと考えています。

-(NSUInteger)factorialofNumber(NSUInteger n){
static NSUInteger f[N + 1];
static NSUInteger i = 0;
if (i == 0)
{
    f[0] = 1;
    i = 1;
}
while (i <= n)
{
    f[i] = i * f[i - 1];
    i++;
}
return f[n];
}

問題は、これを実行すると、12 を超えるすべての値が正しくないことです。これをプレフィックス ファイルに配置して、より大きな値を使用できるようにしましたが、問題は解決していません。これを回避するためのヒントはありますか?

#define NS_BUILD_32_LIKE_64 1
4

1 に答える 1

2

階乗の 13 は、32 ビットの符号なし整数より大きいです。NSUInteger の代わりに or を使用できunsigned long longますuint64_t。このようにして、常に 64 ビット値を取得し、バイナリ互換性を維持NS_BUILD_32_LIKE_64します。Cocoa の 64 ビット移行ガイド:

NS_BUILD_32_LIKE_64 マクロは、アプリケーションをビルドする場合など、バイナリ互換性が問題にならない場合に役立ちます。

于 2014-07-21T07:23:01.183 に答える