在C语言中任何数据类型都有一定的表示范围。而当两个被乘数很大时,普通算法显然不能求出精确解,因此我们可以用数组的形式解决。
原理示意图:
A1 A2 A3
× B1
__________
C1 C2 C3 C4
#include<stdio.h>
int main()
{
int a[10000] = { 0 }, s, c = 0, n, i, j;
//输入要求阶乘的n的值
scanf("%d", &n);
a[0] = 1;
//开始执行循环,因为首项都为1,所以从2开始乘起乘到第n项。
for (i = 2; i <= n; i++)
{
c = 0;
//S表示每次从个位开始乘i的值,a[j]表示该位的值,c表示应该进位的值
for (j = 0; j < 10000; j++)
{
s = a[j] * i + c;
a[j] = s % 10;
c = s / 10;
}
}
//执行循环,找出数组有多少项
for (j = 9999; j > 0; j--)
if (a[j])break;
//倒序输出数组,表示n的阶层
for (i = j; i >= 0; i--)
printf("%d", a[i]);
printf("\n");
return 0;
}