#include<stdio.h>
#include<malloc.h>
#define MAXN 1000
void pnext(int a[], int k)
{
// 这里的m代表有几位
int *b, m = a[0];
int i, j, r, carry;
b = (int *)malloc(sizeof(int) * (m + 1));
// b 相当于把前面的值保存下来
for (i = 1; i <= m; i++)
{
b[i] = a[i];
}
// 多加k次
for (j = 1; j < k; j++)
{
// carry 进位值
for (carry = 0, i = 1; i <= m; i++)
{
r = (i <= a[0] ? (a[i] + b[i]) : a[i]) + carry;
a[i] = r % 10; // 个位数
carry = r / 10; // 求其是否还有高位
}
if (carry != 0)
{
a[++m] = carry;
}
}
free(b);
// 更新 m
a[0] = m;
}
// 计算k!
void write(int *a, int k)
{
printf("%4d! =", k);
for (int i = a[0]; i > 0; i--)
{
printf("%d", a[i]);
}
printf("\n");
}
void main()
{
int Num[MAXN], n;
printf("Enter the number n:");
scanf("%d", &n);
Num[0] = 1;
Num[1] = 1;
write(Num, 1);
for (int i = 2; i <= n; i++)
{
pnext(Num, i);
write(Num, i);
}
}
递推求阶乘大数
最新推荐文章于 2022-03-21 14:00:57 发布
本文介绍了一个使用C语言编写的程序,该程序能够计算任意正整数的阶乘,并展示了如何通过逐步增加来更新一个大整数数组表示的大数。程序首先定义了一个大数数组并初始化为1,然后通过自定义的pnext函数逐步累加,最终输出从1到给定数值的阶乘结果。
2648

被折叠的 条评论
为什么被折叠?



