析因计算:unsigned long long overflows,如何使用uintmax_t?

时间:2013-09-06 08:22:22

标签: c factorial

计算此方法中的阶乘:

unsigned long long factorial(int n){
    unsigned long long temp = 1L;
    for(int i = 0 ; i < n ; i++){
        temp *=(n - i);
    }
    printf("\n%d factorial is %llu",n,temp);
    return temp;
}

仅允许计算到20!

20! = 2432902008176640000 << 2^64
21! = 51090942171709440000 >> 2^64

我从未使用uintmax_t并阅读其他一些SO文章,使用起来感觉非常复杂。如果有人可以提供一些简单的片段作为如何使用和打印它们,这将是一个重大的帮助。

编辑关于Didier Trosset的问题,我认为20肯定不会是人们可以计算C中的阶乘的极限。我正在读取uintmax_t是最大的数据类型,所以我认为它可能是128位或其他东西。所以我想用它。

另外,我不知道C中的大型int库。抱歉,如果我创建了一个重复的帖子。

0 个答案:

没有答案