我做了一个函数来计算从0到16的因子数(没有负数且相当小)
但它不会超过n15 知道我应该使用哪种数据类型以及在哪里?
long factorial(long num1)
{
long f;
if (num1 >= 0 && num1 <= 16)
{
for (long i = 0; i <=num1; i++)
{
if (i==0) f = 1;
else f=f * i;
}
return f;
}
return 0xFFFFFFFF;
}
答案 0 :(得分:2)
我猜你使用的是32位系统,否则它会起作用。
你可以在32位整数上表示的最大数量是2 ^ 31(你必须为符号保存一点)。
根据您的架构(如果没有此信息,您的问题无法解答),long
可能会存储在32位上,因此您无法准确表示16!因为它大于2 ^ 31。
寻找编译器/体系结构的特定扩展,以保证您具有64位存储(标准不保证,它不规定类型必须具有多少位,它只是设置类型存储大小之间的不等式)
答案 1 :(得分:1)
将long
更改为long long
:
long long factorial(long num1)
{
long long f;
//....
}
答案 2 :(得分:0)
尝试查看库gmplib - 应该允许其存储和使用非常大的数字