4-10 阶乘计算升级版

betball贝博app PTA, 基础编程题目集 499 次浏览 没有评论
4-10 阶乘计算升级版   (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

 

程序:

void Print_Factorial(const int N)
{
	int a[3000] = {0};
	int len_a=1;
	int n=N;
	int temp;
	a[0] = 1;
	int weizhi_a;
	if (N < 0)//非法判断 
	{
		printf("Invalid input");
		return;
	}
		
	for (n=2; n<N+1; n++)
	{
		for (weizhi_a = 0; weizhi_a <len_a; weizhi_a++)
		{
			a[weizhi_a] *= n;			
		}
		//if (a[len_a-1]>9)进位判断不完全,若乘值为三位数,需要加2,故用“长度增加”部分
		//	len_a++;
		for (weizhi_a = 0; weizhi_a <len_a; weizhi_a++)
		{
			int i = 1;
			if (a[weizhi_a]>9)
			{
				temp = a[weizhi_a];
				a[weizhi_a] = temp%10;
				while (temp > 0)
				{
					temp /= 10;
					a[weizhi_a + (i++)] += temp % 10;
				}
			}
			//长度增加
			if (weizhi_a + i>len_a)
			{
				len_a = weizhi_a + i-1;
			}
		}
	}
	for (int i = len_a-1; i >= 0; i--)
		printf("%d", a[i]);
}

发表评论

邮箱地址不会被公开。

Go