1. 程式人生 > >求大數的階乘。比如1000的階乘。C語言裡沒有能夠存這麼大的資料型別。

求大數的階乘。比如1000的階乘。C語言裡沒有能夠存這麼大的資料型別。

我的想法是用兩個迴圈,

外層迴圈從1到n。內層迴圈求每個數與前面的數的乘積。

#include<stdio.h>
int main()
{
static int a[100000]; //設定一個超大陣列來儲存乘積結果。
int n;//要求的n的階乘
int jw;//用來表示進位
int i,j;//控制迴圈
int len=1;//初始化陣列長度為1
int temp;//過程變數
scanf("%d",&n);
a[1]=1;
for(i=2;i<=n;i++)//遍歷。從1到n
{
jw=0;
for(j=1;j<=len;j++)//從陣列的低位開始乘
{
temp=a[j]*i+jw;//變數儲存結果
a[j]=temp%10;//將變數最後一位放入陣列。
jw=temp/10;//表示除了最後一位需要進位的數
if(j>=len && jw!=0)
len++; //陣列長度加一
}

}
for(i=len;i>=1;i--)//逆序輸出陣列就是結果
printf("%d",a[i]);
printf("\n");
return 0;
}


這是執行測試的結果,完全正確。

(初次寫,希望多多支援)