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

本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:
void Print_Factorial ( const int N );
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

裁判测试程序样例:
#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
int N;

scanf("%d", &N);
Print_Factorial(N);
return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
15
输出样例:
1307674368000

solution:利用数组实现一个比较简单的大数阶乘

void Print_Factorial ( const int N )
{
	if (N < 0)
	{
		printf("Invalid input\n");
	}
	else
	{
		int a[3000];
		int temp, num, digit; //temp每一位的结果 num进位 digit结果的位数
		int i, j;
		a[0] = 1;
		digit = 1;//从第一位开始 
		for (i = 2; i <= N; ++i)
		{
			num = 0;
			for (j = 0; j < digit; ++j)
			{
				temp = a[j] * i + num;
				a[j] = temp % 10;//把当前位的数字存入数字 
				num = temp / 10;//向前面一位进位 
			}
			while (num) //当i的阶乘算完,仍有进位,则数组需扩大
			{
				a[digit] = num % 10;
				num /= 10;
				digit++;
			}
		 } 
		 for (i = digit - 1; i >= 0; i--)
		 {
		 	printf("%d", a[i]);
		 }
	}
 } 
上一篇:Base64转码和字符串互转


下一篇:机器学习之深度学习学习笔记(四)