思考:100!的结果是非常大的,超出了基本数据的表示范围的结果。所以,我们需要寻找一种能正确地表达出这么大整数的方法。如果我们把100!的结果当做是一个字符串的话,那么数组或者指针是可以正确表达出来100!的结果。下面的代码我是使用数组来存储100!的结果。下面的代码也就是把数组的每一位元素与要求的阶乘的数相乘加上上一次的商的尾数(求余)赋值给数组对应的下标元素。
#include <stdio.h>
void multiply(int num[], int iIndex, int iFactor)
{
int iCarry = 0;
for(int i = 0; i < iIndex; i++)
{
int iProduct = num[i] * iFactor + iCarry;
num[i] = iProduct % 10;
iCarry = iProduct / 10;
}
while(iCarry > 0)
{
num[iIndex] = iCarry % 10;
iCarry /= 10;
iIndex++;
}
}
int main()
{
int iCount = 100;
int ciResult[1000] = {0};
int iIndex = 1;//当前使用数组小标的大小
ciResult[0] = 1;
for(int i = 2; i <= iCount; i++)
{
multiply(ciResult, iIndex, i);
iIndex++;
}
for(int i = iIndex - 1; i >= 0; i--)
{
printf("%d", ciResult[i]);
}
printf("\n");
return 0;
}
运行结果