當前位置:編程學習大全網 - 編程語言 - 關於1000的階乘求編程高手做答菜鳥旁邊站

關於1000的階乘求編程高手做答菜鳥旁邊站

應該很簡單的

這樣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,退出。

}

  • 上一篇:星際爭霸2與星際爭霸1有何不同?
  • 下一篇:少兒編程有什麽好處
  • copyright 2024編程學習大全網