階乘問題(求 階乘最右邊不為 0 的數)

2021-08-30 17:50:48 字數 1596 閱讀 3644

題目提供者評測方式雲端評測標籤usaco高效能

難度普及/提高-

時空限制1000ms / 128mb

提交 題解

也許你早就知道階乘的含義,n階乘是由1到n相乘而產生,如:

12!= 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 \times 8 \times 9 \times 10 \times 11 \times 12 = 479,001,60012!=1×2×3×4×5×6×7×8×9×10×11×12=479,001,600

1212的階乘最右邊的非零位為66。

寫乙個程式,計算n(1 \le n \le 50,000,000)n(1≤n≤50,000,000)階乘的最右邊的非零位的值。

注意:10,000,000!10,000,000!有24999992499999個零。

輸入格式:

僅一行包含乙個正整數nn。

輸出格式:

乙個整數,表示最右邊的非零位的值。

輸入樣例#1:複製

12
輸出樣例#1:複製

6
usaco training section 3.2

題解:見**

#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps (1e-8)

#define max 0x3f3f3f3f

#define u_max 1844674407370955161

#define l_max 9223372036854775807

#define i_max 2147483647

#define re register

#define pushup() tree[rt]=tree[rt<<1]+tree[rt<<1|1]

#define nth(k,n) nth_element(a,a+k,a+n); // 將 第k大的放在k位

using namespace std;

inline int read()

while(c >= '0' & c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}typedef long long ll;

const double pi = atan(1.)*4.;

const int m=1e3+5;

const int n=2e5+5;

int main()

printf("%lld\n",ans%10);

return 0;

}

階乘最右邊的那個非0數

乙個整數n的階乘可以寫成n 它表示從11到nn這nn個整數的乘積。階乘的增長速度非常快,例如,13 就已經比較大了,已經無法存放在乙個整型變數 中 而35 就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n n 是非常困難的。幸運的是,在本題中,我們的任務不是去計算 n 而是去...

n的階乘問題 階乘位數 階乘末尾0的個數

初來乍到,望高手指教!原有解決n的階乘的方式 迭代,如果是大資料的話,迭代會吃掉大量記憶體,導致記憶體溢位 用平時的迭代解決n的階乘問題 在計算21的階乘時,結果已然為負數,超出整型資料表示範圍。計算34的階乘是,結果已然為0 此段 將n的階乘問題解決,實現無限大數的階乘!無限 兩字有點牽強,數字太...

石油大 HD階乘 求階乘末尾0的個數

想法實現 n的階乘定義為n n n 1 n 2 1。n的雙階乘定義為n n n 2 n 4 2或n n n 2 n 4 1,取決於n的奇偶性。但是階乘的增長速度太快了,所以我們現在只想知道n 和n 末尾的0的個數。乙個正整數n,n 107 兩個整數,分別為n 和n 末尾0的個數。階乘過程中,出現5的...