当二进制中最后一位1*2时1会进一位,所以本题
求
N!中有几个约数2.
sum = n/2 + n/4 + n/8 + … + 1.
原因:
n/2为从1~n有几个能被2整除,n/4为有几个能被4整除,以此类推。
例如:17!
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
n/2 = 8 : 2,4,6,8,10,12,14,16
n/4 = 4 : 4,8,12,16
……
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int ans = 1;
while(n){
ans += n>>1;
n>>=1;
}
printf("%d\n",ans);
}
return 0;
}