0

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

3 回答 3

2

我猜你使用的是 32 位系统,否则它会工作。

您可以在 32 位整数上表示的最大数字是 2^31(您必须为符号保存一点)。

根据您的架构(如果没有此信息,您的问题将无法回答),along可能存储在 32 位上,因此您无法准确表示 16!因为它大于 2^31。

寻找编译器/体系结构的特定扩展以保证您有 64 位存储(标准不保证,它没有规定类型必须具有多少位,它只是设置类型存储大小之间的不等式)。

于 2013-03-03T07:22:45.257 回答
1

更改longlong long

long long factorial(long num1)
{
    long long f;
    //....
}
于 2013-03-03T07:23:42.553 回答
0

尝试查看库gmplib - 应该能够存储和使用非常大的数字

于 2013-03-03T07:29:53.720 回答