2808: 【例45.4】 数位翻转
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:14
解决:10
题目描述
给定一个数$n$,你可以进行若干次操作,每次操作可以翻转$n$的二进制表示下的某一位,即将$0$变成$1$,$1$变成$0$。
请问:至少需要多少次操作,才能将$n$变成$n-1$。
请问:至少需要多少次操作,才能将$n$变成$n-1$。
输入
一个正整数$n$。($1 < n \le10^9$)
输出
输出最少的操作次数。
样例输入 复制
10
样例输出 复制
2
提示
C++内置函数:
__builtin_popcount(n):返回输入数据n中,二进制中‘1’的个数。
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
n=n^(n-1);
cout<<__builtin_popcount(n);
return 0;
}