标签:
根据题意,A和B的二进制1的个数相同,且要求距离最小,那么A和B的差别就在于相邻的bit位,如1100和1010,0011和0101等。
当A的最后一位(低位)为0,则找到最后(右边)一位1,然后将该1与左边的0交换,即得到B;如1100和1010
当A的最后一位(低位)为1,则找到最后(右边)一位0,然后将该0与右边的1交换,即得到B。如0011和0101
#include <iostream> using namespace std; int sameSumOfOne(int a){ if(a==0) return 0; int b=0; int pos=0; if((a&1)==0){ while(((a>>pos)&1)==0) pos++; b=a-(1<<pos)+(1<<(pos-1)); } else{ while(((a>>pos)&1)==1) pos++; b=a-(1<<(pos-1))+(1<<pos); } return b; } int main() { int a[]={0,1,2,3,4,5,6,7,8,9,10}; int n=sizeof(a)/sizeof(a[0]); for(int i=0;i<n;i++) cout<<a[i]<<" "<<sameSumOfOne(a[i])<<endl; cout<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/AndyJee/p/4579086.html