对不起,我之前的程序确实有问题。在计算阶乘时,使用了'unsigned long long'类型,但这种类型的范围也是有限的。对于较大的整数,结果仍然可能溢出。

为了解决这个问题,可以使用'double'类型来存储阶乘的结果,同时使用科学计数法输出结果。下面是改进后的代码:

#include <stdio.h>

double calculateFactorial(int num);

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    // 检查输入是否为负数
    if (num < 0) {
        printf("阶乘只能计算非负整数!");
        return 0;
    }

    double factorial = calculateFactorial(num);
    printf("%d的阶乘为:%.0lf\n", num, factorial);

    return 0;
}

double calculateFactorial(int num) {
    double factorial = 1.0;
    
    // 逐个乘上所有整数,从1到num
    for (int i = 1; i <= num; ++i) {
        factorial *= i;
    }
    
    return factorial;
}

这个程序使用'double'类型来存储阶乘的结果,可以处理更大的整数,但仍然存在精度限制。如果超出'double'类型的范围,结果可能会变得不准确。

C语言阶乘计算:解决溢出问题

原文地址: http://www.cveoy.top/t/topic/c9Le 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录