C语言阶乘计算:解决溢出问题
对不起,我之前的程序确实有问题。在计算阶乘时,使用了'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'类型的范围,结果可能会变得不准确。
原文地址: http://www.cveoy.top/t/topic/c9Le 著作权归作者所有。请勿转载和采集!