PTA基础编程题目集(6-10 阶乘计算升级版)

void Print_Factorial(const int N)
{
        int n = N;
	if (n < 0)
		printf("%s", "Invalid input");
	if (n == 0 || n == 1) 
		printf("%d", 1);
 
	/*
	数字运算时:
	该算法通过数组控制,使得每次都进行 同位数*同位数 (可以小,不能大)运算,
	且将 大数乘法 -> 个位*多位。
	同位数*同位数=本位数+进位数:
	(在 个位*多位 的情况下)
        进位数+进阶本位数 < 进位值(一个简单的乘法规律)
	从而不产生多次相加的连续进位问题
	*/
 
	if (n > 1)
	{
		int a[1200] = { 1,0 }, len = 1;//一个数组,一个位数指标len	
 
		for (int c, j; n > 1; n--)//这里的进阶c设计的非常巧妙
		{
			for (j = 0, c = 0; j < len; j++)//通过j让多位的每位被乘
			{
				int p = a[j] * n + c;
				a[j] = p % 1000;
				c = p / 1000;
			}
			c > 0 ? a[j] = c, len++ : 0;//一次单位*多位的最后一次c的运算
		}
 
		printf("%d", a[len - 1]);//注意打印格式的规范化
		for (int m = len - 2; m >= 0; m--) 
			printf("%03d", a[m]);
	}
}
--------------------- 
作者:dofGoodman 
来源:CSDN 
原文:https://blog.csdn.net/qq_43269246/article/details/83302766 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

你可能感兴趣的:(PTA)