nyoj 28 大數階乘

2022-03-12 23:21:16 字數 1046 閱讀 1904

就是個簡單的高精度,只是一開始我打表超記憶體了,然後用了各種技巧硬是把記憶體縮到了題目要求以下(5w+kb),感覺挺爽的,**如下:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6 typedef long

long

ll;7

const

int m = 5002;8

const

int mod =1e6;910

int b[m + 3][2800], len[m + 3

];11

12 inline void init(int n =m)

23while

(carry)

27 len[i] =x;28}

29}3031 inline void print(const

int &x)

3940 inline void output(const

int &n)

4950

intmain()

出題人原意應該不是讓我們打表,而是每讀入乙個數重新計算乙個數……吧:

1 #include2 #include3 #include4 #include5

const

int m = 5002;6

7int b[2][18000];8

9 inline void solve(const

int &n)

19while

(carry) 23}

24for(int j = len - 1; j >= 0; --j)

25 putchar(b[n & 1][j] + '0'

);26 puts(""

);27}28

29 template 30 inline bool read(t &x)

39return1;

40}4142

intmain()

NYOJ 28 大數階乘

題意 對於比較小的n,求其階乘的時候可以用遞迴解決。但是如果n很大的時候,比如1000,那麼n 肯定超出整形資料所能表示的範圍。因此必須採用其它方法解決,通常解決大數運算資料超出範圍的問題時採用陣列去模擬。其實求算n 可以看成是每次兩個整數相乘的過程,因此可以模擬成大數相乘的過程。只是需要增加一些變...

NYOJ 大數階乘

描述 我們都知道如何計算乙個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它?輸入 輸入乙個整數m 0 m 5000 輸出 輸出m的階乘,並在輸出結束之後輸入乙個換行符 樣例輸入 樣例輸出 include include define max 20000 最大數5000 5000 4 i...

大數運算 7 大數階乘 求階乘

對於大數來說,乙個數的階乘是非常大的,同樣,乙個int型別的整數,他的階乘就有可能會很大。就拿50來說,他的階乘位數是65位,就已經遠遠超過了long long int型別的最大值。這時候,我們要通過字串的方法,來進行階乘的運算。當然,需要注意的是 我們所求乙個數的階乘,這個數是在int範圍內的,5...