本题要求实现一个打印非负整数阶乘的函数。
题目分析:
本来以为基础编程题都比较容易,做到这里难度陡增……阶乘计算的结果会轻松超过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]);
}
}