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 位无符号整数。unsigned long long您可以使用或代替 NSUInteger uint64_t。这样,您始终获得 64 位值并保持二进制兼容性,这可能会受到NS_BUILD_32_LIKE_64声明的影响。可可的 64 位转换指南

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

于 2014-07-21T07:23:01.183 回答