⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 高精度阶乘.cpp

📁 实现阶乘中位数过多而没有一种数据类型可以表示的限制
💻 CPP
字号:
#include <stdio.h>
void main()
{
	int x, A, B, M, N, a[500] = {0}, i, j, temp;
	scanf("%d", &x);
	if (!(x >= 0 && x <= 150))
		return;
	A = x;
	M = -1;
	while (A > 0)
	{
		M ++;
		a[M] = A % 10;
		A /= 10;
	}
	j = M;
	while (x >= 3)
	{
		int b[500] = {0}, c[500][500] = {0}, d[500] = {0};

		M = j;

		x --;
		B = x;
		N = -1;
		while (B > 0)
		{
			N ++;
			b[N] = B % 10;
			B /= 10;
		}

		

		for (i = 0;i <= N;i ++)
		{
			temp = 0;
			for (j = 0;j <= M + N + 1;j ++)
			{
				if (j - i < 0) {c[i][j] = 0;temp = 0;continue;}
				c[i][j]		= (b[i] * a[j - i] + temp) % 10;
				temp		= (b[i] * a[j - i] + temp) / 10;
			}
		}
		temp = 0;
		for (j = 0;j <= M + N + 1;j ++)
		{
			for (i = 0;i <= N;i ++)
				d[j] += c[i][j];
			a[j] = (d[j] + temp) % 10;
			temp = (d[j] + temp) / 10;
		}

	}
	while (j >= 0)
	{
		if (a[j] != 0)
			break;
		j --;
	}
	printf("结果一共有%d位\n", j + 1);
	while (j >= 0)
	{
		printf("%d", a[j]);
		j --;
	}
	printf("\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -