在Objective-C中返回大于12的因子

时间:2014-07-21 04:49:36

标签: objective-c int biginteger factorial nsuinteger

我有以下代码,我希望它给我最多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

1 个答案:

答案 0 :(得分:2)

13的因子大于32位无符号整数。 您可以使用unsigned long longuint64_t代替NSUInteger。这样,您始终可以获得64位值并保持二进制兼容性,这可能会因声明NS_BUILD_32_LIKE_64而受到影响。 64-Bit Transition Guide for Cocoa

  

当二进制兼容性不是问题时,例如构建应用程序时,NS_BUILD_32_LIKE_64宏非常有用。