大数的阶乘算法

简介:
#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;
}

目录
相关文章
|
2月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
16 0
|
3月前
|
JavaScript 算法
|
4月前
|
机器学习/深度学习 算法 vr&ar
☆打卡算法☆LeetCode 172. 阶乘后的零 算法解析
☆打卡算法☆LeetCode 172. 阶乘后的零 算法解析
|
8月前
|
算法
基础算法(大数操作 前缀和 差分)
基础算法(大数操作 前缀和 差分)
45 0
|
10月前
|
分布式计算 算法 搜索推荐
【经典算法问题 一】海量数据中找出前k大数(topk问题)
【经典算法问题 一】海量数据中找出前k大数(topk问题)
111 0
|
11月前
|
算法 C++ Python
【每日算法Day 82】面试经典题:求第K大数,我写了11种实现,不来看看吗?
【每日算法Day 82】面试经典题:求第K大数,我写了11种实现,不来看看吗?
|
12月前
|
算法
算法学习--递归求n的阶乘
算法学习--递归求n的阶乘
|
算法 Java
阶乘函数后 K 个零(java 算法)
阶乘函数后 K 个零(java 算法)
61 0