主要是熟悉位操作,寻找一个数二进制1位相同,且大小最相近的数。
//题目描述 // //有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小) //给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。 //测试样例: //2 //返回:[1, 4] // //思路: //取得略大的数: //c0 是拖尾0的个数,c1是紧邻拖尾0左方连续位为1的个数, p为最右边但非拖尾的0 等于 c0 + c1 //1 把位p置为1 //2 将p右方所有位置为零 //(1,2的快速做法就是将拖尾0变为1,然后加1) //3 在右方插入c1 - 1 个1 //取得略小的数: //1 c1是拖尾1的个数, c0是紧邻拖尾1的左方一连串0的个数,p为最右边但非拖尾的1 等于c0 + c1 //2 把位p置为0 // (1,2的快速版本就是将拖尾1置为0,然后减1) //3 将p右方所以位置清零 //在p的紧邻右方插入c1 + 1个1 #include <iostream> using namespace std; #include <vector> #in