題幹:
【題意】
給你乙個陣列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 ...