#include<bits/stdc++.h>
using namespace std;
int a[33];
int getNum(int n)
{
memset(a,0,sizeof(a));
int cnt=0;
int t=n;
while(t)
{
if(t&1) a[cnt]=1;
cnt++;
t>>=1;
}//二进制表示
int pre=0;
int res=0;
for(int i=cnt-1;i>=0;i--)
{
if(a[i]==1)//如果某一位为1
{
res=res+(1<<(i-1))*i + pre*(1<<i);
pre++;
}
}
res=res+pre;
return res;
}
int main()
{
int n;
while(cin>>n)
{
cout<<getNum(n)<<endl;
}
}
编程之美2.4 以二进制表示的1-N中1的数目
