1. 程式人生 > >南陽理工題目28大數階乘

南陽理工題目28大數階乘

大數階乘

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3
描述
我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它?
輸入
輸入一個整數m(0<m<=5000)
輸出
輸出m的階乘,並在輸出結束之後輸入一個換行符
樣例輸入
50
樣例輸出
30414093201713378043612608166064768844377641568960512000000000000
來源
經典題目

分析

大數階乘其實就是模擬乘法然後用陣列去儲存

乘法就是把第二個數和第一個數的每一位都相乘,然後把餘數留下,然後把商加到下一位相乘後的數上面

例如3的階乘是6,4的階乘就是6*4,把4留下,2近上去,0*4+2=2,所以結果是24

01.#include<stdio.h> 02.#include<string.h> 03.const int maxn = 16400; 04.int f[maxn]; 05.int main() 06.{ 07.int i, j, n,c; 08.scanf("%d", &n); 09.f[0]=1; 10.for(i=2; i<=n; i++) 11.{ 12.c=0; 13.for(j=0; j<maxn; j++) 14.{ 15.int s=f[j]*i+c; 16.f[j]=s%10; 17.c=s/10; 18.} 19.
} 20.for(i=maxn-1; i>=0; i--) 21.{ 22.if(f[i]) 23.break; 24.} 25.for(j=i; j>=0; j--) 26.printf("%d",f[j]); 27.printf("\n"); 28.return 0; 29.}