用C语言编程实现求一个任意大小整数的精确阶乘值,即:求n!,n是任意大小的整数,n!的结果是精确值。不要用指针
时间: 2024-09-15 16:13:27 浏览: 42
C语言上机 | 求1! ~n! 的值
在C语言中,由于标准库并不提供直接计算大整数阶乘的函数,我们需要使用递归和数组来实现。这里是一种常见的方法,叫做"记忆化",用于存储已经计算过的阶乘结果,避免重复计算:
```c
#include <stdio.h>
#include <stdlib.h>
// 记忆化的动态数组存储阶乘结果
#define MAX_FACT 10000 // 可以根据需要调整最大整数范围
long long fact[MAX_FACT + 1] = {0}; // 初始化所有元素为0
// 阶乘函数,利用记忆化技术
long long factorial(int n) {
if (n == 0 || n == 1)
return 1; // 0! 和 1! 的基础情况
if (fact[n] != 0) // 如果之前计算过,直接返回结果
return fact[n];
fact[n] = n * factorial(n - 1); // 递归计算并保存结果到数组
return fact[n];
}
int main() {
int n;
printf("请输入一个非负整数:");
scanf("%d", &n);
if (n >= MAX_FACT) {
printf("输入过大,超出当前处理范围。\n");
return 1;
}
long long result = factorial(n);
printf("n! = %lld\n", result);
return 0;
}
```
在这个程序中,我们首先检查是否已计算过给定数字的阶乘,如果已计算,则直接返回结果,否则通过递归计算并将结果存入数组。注意这个方法对于非常大的n可能会导致栈溢出,因为递归深度很大。
阅读全文