筆試題 階乘問題

2021-09-11 02:33:26 字數 965 閱讀 7281

題幹:

【題意】

給你乙個陣列n(1<=n<=1e5)

讓你輸出有多少數的階乘後恰好有n個0,並依次輸出。

【型別】

二分or暴力

【分析】

肯定滿足,數字越大,其後的0的個數也就越多。

於是我們可以二分出最小的l,使得fac[l]>=n

同時我們二分出最大的r,使得fac[r]<=n

然後答案就是區間段[l,r]

而算fac[l]有多少個0,就是檢視fac[l]中有多少個5

因為n不大,所以另外一種做法是暴力。

我們直接求出fac[i]的末尾有多少個0即可

【時間複雜度&&優化】

o(log(n)log(n)) or o(nlogn)

解題報告:

ac**:

#include#include#include#include#include#include#include#include#include#include#include#include#includeconst int n = 0, m = 0, z = 1e9 + 7, ms63 = 0x3f3f3f3f;

int n;

int main()

if (five > n)r = m;

else l = m + 1;

} int r = l-1;

l = 0;

r = 1e9;

while (l < r)

if (five < n)l = m + 1;

else r = m;

} int l = l;

printf("%d\n", r - l + 1);

for (int i = l; i <= r; ++i)printf("%d ", i);

puts("");

} return 0;}/*

*/

階乘的筆試題

1 n 末尾有多少個0?這道題可以參考 程式設計之美 2.2節 不要被階乘嚇倒 用數學語言描述解法對我來說,太艱難了。我這裡只是舉例子 n 100 加以說明。方法一 在1 100中,5 2 10,10 1 10,15 2 30,20 1 20,25 4 100,100 1 100 這裡注意到,只要是...

筆試題 計算N的階乘

public class test stringbuilder tmpsb new stringbuilder sum for j i j len1 1 0 result add result,tmpsb.tostring else stringbuilder tmpsb new stringbui...

python筆試題 計算n的階乘

計算n!例如n 3 計算3 2 1 6 求10!方法一 可以用python裡面的reduce函式,reduce 函式會對引數序列中元素進行累積 1.用lambda函式 from functools import reduce a 10 b reduce lambda x,y x y,range 1 ...