来自数据结构与算法分析1_5.
题目中给的提示:如果N是奇数,那么它等于N/2的二进制表示中1的个数加一
终于明白为啥了,一个整数能整除2,就是把二进制末尾的零去掉,如果不能整除2,就说明末尾是1,累加。
比如20是10100,除以两次2之后就是101,也就是5了。
#include<iostream>
int numberofone(int n)
{
if (n < 2)
return n;
else return n % 2 + numberofone(n / 2);
}
int main()
{
int n = 31;
int res = 0;
res = numberofone(n);
std::cout << res << std::endl;
return 0;
}