Eif*_*fel 3 c algorithm max factorial unsigned-long-long-int
如何在C中编写一个适当的算法来确定程序可以使用的最大值计算因子unsigned long long int?  
我的例子不能正常工作.使用Linux/64bit和GCC,它给了我65次迭代.
#include <stdio.h>
int main() {
    unsigned long long int num, i;
    unsigned long long int factorial = 1;
    num = 1;
    for (i = 1; i <= num; i++) {
        factorial = factorial * i;
        num++;
        if (factorial <= 0) {
           printf("\nMaximum number is: %d\n", i - 1);
           break;
        }
    }
}
您的程序无法正常运行,因为:
factorial总是>= 0因为它有一个无符号类型.一旦你将足够的时间乘以2或2的倍数,程序停止的唯一原因就是factorial最终0.更可靠的方法是在执行乘法之前检查溢出:
#include <limits.h>
#include <stdio.h>
int main(void) {
    unsigned long long int i, factorial;
    for (i = factorial = 1; factorial <= ULLONG_MAX / i; i++) {
        factorial = factorial * i;
    }
    printf("\nMaximum number is: %llu! = %llu\n", i - 1, factorial);
    return 0;
}
输出:
Maximum number is: 20! = 2432902008176640000