我有以下代码,我希望它给我最多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
答案 0 :(得分:2)
13的因子大于32位无符号整数。
您可以使用unsigned long long
或uint64_t
代替NSUInteger。这样,您始终可以获得64位值并保持二进制兼容性,这可能会因声明NS_BUILD_32_LIKE_64
而受到影响。 64-Bit Transition Guide for Cocoa:
当二进制兼容性不是问题时,例如构建应用程序时,NS_BUILD_32_LIKE_64宏非常有用。