用C语言编程实现求一个任意大小整数的精确阶乘值,即:求n!,n是任意大小的整数,n!的结果是精确值。
时间: 2024-09-15 17:13:24 浏览: 107
在C语言中,由于内置的数据类型限制,直接计算大整数的阶乘可能会导致溢出,尤其是在n很大时。因此,我们需要使用一种方法来处理这个问题,比如迭代或者递归,并结合数组或者结构体来存储中间结果,直到达到我们能够控制的范围。以下是一个使用数组存储中间乘积的迭代方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个足够大的数组来存储中间乘积
#define MAX_FACT 1000000 // 根据需要调整这个常量
typedef long long int FactorialArray[MAX_FACT];
void multiply(FactorialArray* result, int index) {
if (index <= 0) return;
*result = (*result) * index; // 累乘操作
}
int factorial(int n) {
FactorialArray fact = {1}; // 初始化数组元素为1
for (int i = 2; i <= n; ++i) {
multiply(&fact, i);
// 防止溢出:每次只对数组的第一个元素进行更新
while (fact[0] > MAX_FACT) {
fact[0] /= MAX_FACT - 1; // 减少最大元素,其他元素相应减少
}
}
return fact[0];
}
int main() {
int n;
printf("Enter a non-negative integer: ");
scanf("%d", &n);
if (n >= 0) {
long long int result = factorial(n);
printf("The factorial of %d is %lld\n", n, result);
} else {
printf("Invalid input! Please enter a non-negative number.\n");
}
return 0;
}
阅读全文
相关推荐


















