NYOJ954--N的階乘的二進位制表示最低位的1的位置
阿新 • • 發佈:2018-12-01
這個題和51nod1003 原理差不多
都是關於階乘的一些技巧
題目:
原理:
二進位制數
乘上2 末尾會多一個0 再乘一個二 末尾會再多一個0 也就是乘上2^2(2的平方)末尾會多兩個0
以此類推 末尾有多少0 怎麼算
這個數 的因子中2出現的次數 就是末尾0的個數
而求一個數字n的階乘中某個因子出現的次數 我們的方法之前說過
我們用n累除這個數 得到的數累加 就是次數
(注意 這個方法 適用條件 我們要求的數字是n的階乘 此時我們利用n 就可以求得次數 不用算出n!
程式碼
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; int main(){ int n; while(~scanf("%d",&n)){ int cnt=0; while(n){ n/=2; cnt+=n; } printf("%d\n",cnt+1); } return 0; }