其实有一个函数还是挺不为人知的,叫__builtin_popcount(n)
可以统计一个数的二进制的1的个数
但是!这个函数后面的n是unsigend int型,对于本题来说会爆掉的
所以我们就可以换成它的long long 版本:__builtin_popcountll(n)
最后直接输出就好啦
void _()
{
cin >> n;
cout << __builtin_popcountll(n);
}
加餐:
__built_popcount除了能统计1的个数外,还可以用变种去统计其他的量,比如:
__builtin_clz(x); 为前导零的数量(从最高位开始到遇到的第一个1的过程中0的数量)
__builtin_clzll(x); 处理long long的数据
__builtin_ctz(x); 为后导零的数量(从最低位开始到遇到的第一个1的过程中0的数量)
__builtin_ctzll(x); 处理long long的数据

京公网安备 11010502036488号