传送门:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2243
很好的一道数学题,我们可以看出,二进制某一位上的1进位次数是2 ^ i - 1(i是1的位置),所以统计二进制数1的个数就行了。
代码:
#include <iostream>
using namespace std;
int main()
{
int n,ans;
while (cin>>n && n)
{
ans=n;
do
ans-=n&1;
while (n>>=1);
cout<<ans<<endl;
}
return 0;
}