编程之美 set 1 不要被阶乘吓倒
生活随笔
收集整理的這篇文章主要介紹了
编程之美 set 1 不要被阶乘吓倒
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
總結
1. 使用加法解決指數問題時, 可用背包問題的變形
2. 題目用到的公式和求解 1~N 中 1 出現的次數的公式類似
?
題目
1. 給定一個整數 N, 那么 N 的階乘 N! 末尾有多少個 0 呢
2. 求解 N! 的二進制表示中最低位 1 的位置
?
思路
1. 第一道題相當于求解 N! 分別是 2^a 和 5 ^b, 第二道題是 2^a
2. 公式: Z = [N/5] + [N/5^2] +... [N/5] 表示不大于 N 的數中 5 的倍數貢獻一個 5, [N/5^2]表示不大于 N 的數中, 5^2 再貢獻一個5
2. 但第一題有一個可以優化的地方, 因為 b < a, 所以只要關注 5^b 即可
?
代碼
?
int ret = 0; while(N) {ret += N/5;N /= 5; }int ret = 0; while(N) {N >>= 1;ret += N; }?
?
轉載于:https://www.cnblogs.com/xinsheng/p/3564615.html
總結
以上是生活随笔為你收集整理的编程之美 set 1 不要被阶乘吓倒的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: toString() 和 强制类型转换
- 下一篇: PHOTOSHOP中3D下拉菜单为灰色如