1. 程式人生 > >NYOJ954--N的階乘的二進位制表示最低位的1的位置

NYOJ954--N的階乘的二進位制表示最低位的1的位置

這個題和51nod1003 原理差不多

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;
}