這樣10000都能求出來的
#include <stdio.h>
#include <conio.h>
long result[10000]; //聲明壹個足夠長的數組
main()
{
void jiech(int input); //求階乘的函數
int a,i;
printf("intput n:");
scanf("%d",&a);//輸入要求的數
for(i=0;i<10000;i++) //給數組附初值
result[i] = 0;
result[9999] = 1; //給最底位 1;
jiech(a);//開始求階乘
for(i=0;i<10000&&result[i]==0;i++); //前面的數組是0的躍過
int j = i; //此時的j,i是最高位。也就是數組裏第壹個高位!=0的數
for(;i<10000;i++) //開始輸出結果
{
//如果有數組元素是壹個0的,輸出000;
if(result[i]==0) { printf("0000"); continue; }
if(result[i]/1000==0 && result[i]/100!=0&&result[i]/10!=0&&i!=j)
{ printf("0%ld",result[i]); continue; } //如果數組元素<100&&>10 的輸出時在前面加壹個0
if(result[i]/100==0 && result[i]/10!=0&&i!=j)
{ printf("00%ld",result[i]); continue; } // 如果數組元素<10&&>0 的輸出時在前面加 00;
if(result[i]/10==0 && i!=j)
{printf("000%ld",result[i]); continue;}
printf("%ld",result[i]);
}
printf("\n");
getch();
}
void jiech(int input)
{
int i,j;
//如果輸入1,不用算。因為初值裏就是1。當然還有壹些情況不用算,在這裏就沒有判斷了。
if(input == 1) return;
do{
for(i=0;i<10000&&result[i]==0;i++); //跟上面壹樣,前面的數組是0的躍過
//開始運算,用輸入的數跟數組的每壹元素相乘
for(;i<10000;i++)
result[i] *= input;
for(i=0;i<10000&&result[i]==0;i++); //跟上面壹樣,前面的數組是0的躍過
for(j=9999;j>=i;j--) //開始整理結果,讓每個元素進位,並且存三位
{
if(j<2)
//如果超過數組的長度,輸出You are crazy!,等待接收字符。
{ printf("You are crazy!\n"); getch(); getch(); return;}
//把六位以後的位進到後面第二個元素裏,並且本元素丟掉這些位。
result[j-2] += result[j]/100000000; result[j] = result[j]%100000000;
//把三位以後的位進到後面第壹個元素裏,並且本元素丟掉這些位。
result[j-1] += result[j]/10000; result[j] = result[j]%10000;
}
input--; //輸入的數遞減
} while(input>1); //如果數減到1,退出。
}