题目源于PTA编程平台,个人练习。由于阶乘之后的结果值过大,采用普通的数据类型无法存储,因此采用数组的方式进行存储。方法是 数组进位
1. C代码
#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 )
{
int num = N;
int a[3000] = {1}; //定义存储最终结果的数组
int size = 1; //记录当前计算得出的结果,占据数组的长度
int carry_bit = 0; //进位值
int i, j, temp; //i,j计数器
if (num < 0)
{
printf("Invalid input\n");
}
else if (num == 0)
{
printf("1\n");
}
else
{
for (i = 1; i <= N; i++)
{
for (j = 0; j < size; j++)
{
temp = i * a[j] + carry_bit; //temp存储本次计算结果
a[j] = temp % 10; //求余取得低位放在低位数组里
carry_bit = temp / 10; //求出进位
}
while (carry_bit) //只要还存在进位值,就向高位赋值. 如:99*99 = 9801.
{
a[size++] = carry_bit % 10;
carry_bit /= 10;
}
}
while (size--) //倒序输出
{
printf("%d", a[size]);
}
}
printf("\n");
}
2. 结果
3. 参考资料
https://blog.csdn.net/peace1024/article/details/78077642