具有数据类型问题的C ++阶乘函数

时间:2013-03-03 07:16:32

标签: c++

我做了一个函数来计算从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;
}

3 个答案:

答案 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 - 应该允许其存储和使用非常大的数字