本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
void Print_Factorial ( const int N );
其中N
是用户传入的参数,其值不超过1000。如果N
是非负整数,则该函数必须在一行中打印出N
!的值,否则打印“Invalid input”。
计算方法:
用一个数组存储结果,一个下标存储结果的一位,低的下标存储结果的低位数,所以数组的0下标对应存储结果的个位数,以此类推.
在一开始,数组初始化为1,然后用一个循环,从2开始,乘以这个数组,一次循环结束后更新数组的值.
比如循环做到5,此时数组的值为24(即4!),这时先用5*4,=20,先把0存储在数组的第一个下标(result[0]),记下进位2,再用5*2,=10,
加上进位2=12,先把2存储在第二个下标(result[1]),
最后用另一个循环,把1存储在第三个下标.
#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
void Print_Factorial ( const int N )
{
if (N < 0)
{
printf("Invalid input");
return;
}
int result[3000] = {1};
int temp, k = 1, n = 0;
for (int i = 2; i <= N ; i ++)
{
for (int j = 0; j < k; j ++)
{
temp = i * result[j] + n;
result[j] = temp % 10;
n = temp / 10;
}
while (n)
{
result[k] = n % 10;
n /= 10;
k++;
}
}
for (int l = k - 1 ; l >= 0; l--)
{
printf("%d",result[l] );
}
}