#include <stdio.h>
#define MAX_LENGTH 20000
// 大数阶乘算法
int main()
{
int i, j, temp;
int bitSize = 1; // 结果的位数
int result[MAX_LENGTH];
int n = 0; // 求n的阶乘
int carryBit = 0;
scanf("%d", &n);
result[0] = 1;
for (i = 2; i <= n; i++)
{
carryBit = 0; // 进位位
// 每次都是将当前结果从低位到高位依次与i相乘
for (j = 1; j <= bitSize; j++)
{
temp = result[j - 1] * i + carryBit;
result[j - 1] = temp % 10;
carryBit = temp / 10;
}
while (carryBit != 0)
{
result[bitSize++] = carryBit % 10;
carryBit /= 10;
}
}
// 结果是倒序的,所以要倒着输出
for (i = bitSize - 1; i >= 0; i--)
{
printf("%d", result[i]);
}
putchar(10);
return 0;
}
大数的阶乘算法
最新推荐文章于 2022-12-27 17:44:18 发布