首页 > 解决方案 > 应该打印 n 的值的程序!(n 由用户输入)在 C 中使用长双精度时表现得很奇怪

问题描述

我目前正在测试 n 的最大值!其中 n 是用户输入的正整数。我对此进行了测试:


对于上述所有类型,程序会打印正确的值。但是,当我将阶乘声明为 long double 类型时,程序的行为很奇怪。例如,我输入 10!,程序输出 -21340077980675728,在 8 之后有 ~50 个零,这显然是不正确的。那么我的错误在哪里?

#include <stdio.h>

int main(void)
{
    int n, i;
    long double factorial = 1.0;

    printf("Enter a positive integer: ");
    scanf(" %d", &n);

    for (i = n; i >= 1; i--){
        factorial *= i;
    }
    printf("Factorial of %d: %.0Lf\n", n, factorial);
    return 0;
}

标签: cfactoriallong-double

解决方案


推荐阅读