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

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

题目分析:

本来以为基础编程题都比较容易,做到这里难度陡增……阶乘计算的结果会轻松超过C语言的整数范围,只有用数组储存,这样的话又需要自己设计一个乘法器。如果用python倒是不用担心取值范围的问题,但是以我对姥姥的了解,后面肯定会来个大数据的让你超时,而且函数题规定只能用C语言写,那就老老实实的写吧。我刚学编程不久,代码写得磕磕绊绊的,总算是勉强通过了。做题的时候用了一个全局变量,总觉得可以优化一下?

int top=0;

void largeMUL ( int A[], int n )
{
	int result[100000] = {0};
	int temp, i, j=0;
	for ( i=0; i<=top; ++i ) {
		temp = A[i] * n;
		j = i;
		while (temp) {
			result[j] += temp % 10;
			if ( result[j] >= 10 ) {
				result[j] -= 10;
				result[j+1] ++;
			}
			temp /= 10;
			j++;
		}
	}
	
	result[j]==0 ? (top = j-1) : (top = j) ;
	for ( i=0; i<=top; ++i )
		A[i] = result[i];
}

void Print_Factorial ( const int N )
{
	if ( N<0 ) {
		printf("Invalid input");
		return;
	}
	int i;
	int A[100000] = {1};
	for ( i=1; i<=N; ++i ) {
		largeMUL(A, i);
	}
	for ( i=top; i>=0; --i ) {
		printf("%d", A[i]);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值