数位翻转
说明
给定一个数n,你可以进行若干次操作,每次操作可以翻转n的二进制表示下的某一位,即将0变成1,1变成0。
请问:至少需要多少次操作,才能将n变成n-1。
输入格式
一个正整数nn。(1 < n <10^9)
输出格式
输出最少的操作次数。
样例
输入数据
10
输出数据
2
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,v,z=0;
char k;
string m,yo;
cin>>n;
v=n-1;
k=n;
while(k)
{
m=char(k%2+48)+m;
k=k/2;
}
while(v)
{
yo=char(v%2+48)+yo;
v=v/2;
}
for(int i=m.size()-1;i>=0;i--)
{
if(m[i]!=yo[i])
{
z++;
}
}
cout<<z;
}