????????一般来说,阶乘的计算使用循环或者递归即可完成,但是100的阶乘结果过于庞大,计算机中没有数据类型可以显示,因此,我们用数组来分别存下结果的每一位,并显示
? ? ? ? 将上一次的结果的每一位与下一次的数相乘,并将得到的数存在当前数组位中? ? ? ??
????????具体的实现过程如下
#include <stdio.h>
int main(int argc,const char* argv[])
{
int arr[256]={1};
int cnt=1; //记录目前最高位的后一位
for(int i=2;i<=100;i++)
{
int carry=0; //记录进位的数,外循环开始时清零
for(int j=0;j<cnt;j++)//内循环,下一项和前一次的计算结果的每一位相乘
{
int num=arr[j]*i+carry;//数组的第j项*i,并加上前一次得到的进位
arr[j]=num%10; //第j位存结果的个位
carry=num/10; //得到这一次相乘的进位
}
while(carry) //将两位以上的进位数存进数组中
{
arr[cnt]=carry%10;//数组最高位存进位的个位
cnt++; //最高位加一
carry/=10; //carry去掉最后一位
}
}
while(cnt--)
{
printf("%d",arr[cnt]);
}
}
|