Live2D

第一次的大数模拟

6-3 阶乘计算升级版 (20 分)

大数模拟

说明:求阶乘的函数
题目:

过程:数字在15!时就把long double爆了,思考后用数组模拟大数储存,代码如下
代码:

void Print_Factorial(const int N)
{
	int sz[3000] = { 0 };
	if (N < 0)printf("Invalid input\n");
	else if (N == 0)printf("1\n");
	else
	{
		sz[0] = 1;
		int weishu = 1, jiecheng = 1, zc = 0, i = 0;
		while (jiecheng <= N)
		{
			while (sz[0] >= 10)//将0中多的数分到后面空间存放                             
			{
				for (i = 0; i < weishu; i++)
				{
					if (weishu - i == 1) break;
					sz[weishu - i] = sz[weishu - i - 1];
				}
				sz[1] = sz[0] % 10;
				sz[0] /= 10;
				weishu++;
			}
			for (i = 0; i < weishu; i++)//各位数乘上阶乘数
			{
				sz[i] *= jiecheng;
			}

			for (i = weishu - 1; i > 0; i--)//将多的数逐渐移至sz[0]中并在下次循环开始后移
			{
				sz[i - 1] += sz[i] / 10;
				sz[i] = sz[i] % 10;
			}
			jiecheng++;
		}
		for (i = 0; i < weishu; i++)
		{
			printf("%d", sz[i]);
		}
	}
}

总结:如上,模拟很成功,经百度一千阶乘为10的2567次方,这里设了3000数组,成功运行;

posted @ 2019-09-19 17:47  风吟承渊  阅读(90)  评论(0)    收藏  举报