我們知道,10 = 2 * 5。每乙個 2 與乙個 5 相乘,結果就增加乙個零。所以求 n!偽**:後面的連續零的個數,其實就是求其中相乘的數含因子對 2 與 5 的個數。又因為從1到某個數,所含 2 的個數比 5 多,所以問題就可以進一步簡化到求含有因子5的個數。
//o(nlogn)超時
int n, ans = 0; cin>>n;
for(int i = 5; i <= n; i+=5)
cout
<求階乘結果後面0的個數:
1~9 中 2*5 會出現0
所以只要有乙個5就會出現乙個0,因為5一定比2出現的晚.
其次有乙個25(5^2)出現,也會出現乙個0,
有乙個125(5^3)出現,也會出現乙個0.
……………………………………………………
………….. (5^k)...,,,....0
偽**:
//o(logn)
int n, ans = 0;
cin>>n;
while(n >= 5)
cout
<51nod 1003 階乘後面0的數量
n的階乘後面有多少個0?
6的階乘 = 1*2*3*4*5*6 = 720,720後面有1個0。
乙個數n(1 <= n <= 10^9)
輸出0的數量
#include
using
namespace
std;
int main()
cout
0;}
51 nod 1003 階乘後面0的數量
1003 階乘後面0的數量 基準時間限制 1 秒 空間限制 65536 kb 分值 5n的階乘後面有多少個0?6的階乘 1 2 3 4 5 6 720,720後面有1個0。input 乙個數n 1 n 10 9 output 輸出0的數量input 示例 5output 示例 1程式設計之美有講 乙...
51nod 1003 階乘後面0的數量
1003 階乘後面0的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 收藏 關注 n的階乘後面有多少個0?6的階乘 1 2 3 4 5 6 720,720後面有1個0。input 乙個數n 1 n 10 9 output 輸出0的數量 input示例 5 ou...
51nod 1003 階乘後面0的數量
思路 看有多少個零,其實就是看階乘中所有相乘的數中含有因子2和5的個數,而2的個數遠遠多於5的個數,所以記錄所有數中含有因數5的個數。這是自己寫的矬 875ms,差點超時。include include include include include include include include ...