-
-
Same binary weight
时间限制:300ms | 内存限制:65535KB难度:3- 描述
-
The binary weight of a positive integer is the number of 1's in its binary representation.for example,the decmial number 1 has a binary weight of 1,and the decimal number 1717 (which is 11010110101 in binary) has a binary weight of 7.Give a positive integer N,return the smallest integer greater than N that has the same binary weight as N.N will be between 1 and 1000000000,inclusive,the result is guaranteed to fit in a signed 32-bit interget.
- 输入
- The input has multicases and each case contains a integer N.
- For each case,output the smallest integer greater than N that has the same binary weight as N. 样例输入
-
1717 4 7 12 555555
样例输出
-
1718 8 11 17 555557
分析:这道题题意是给你一个数N把它转化成二进制以后1的个数称为The binary weight of N,求和该数有相同1的个数
的二进制中最小的那个十进制数。主要运用了c++库函数中的next_permutation函数,我之所以收藏这道题,因为用位运算就是很巧妙的把一个十进制转化成了二进制。
下面简单介绍一下这道题用到的位运算&,和<<.
1,<<的优先级高于&的优先级。
2,&运算就是对应位都是1是结果为1.
3,<<就是左移运算,2<<3=2*pow(2,3),16>>4=16/pow(2,4),pow(2,i)=1<<i;
#include<iostream> #include<vector> #include<algorithm> using namespace std; int get_binary(int n) { vector<int>bits(32,0); for(int i=0;i<32;i++) if(n&1<<i)//每次让2的i次方和n进行与运算从而判断出该位存0,还是存1. bits[31-i]=1; next_permutation(bits.begin(),bits.end());//找出比n大的最小的那个数。 int sum=0; for(int i=0;i<32;i++) if(bits[i]) sum+=bits[i]<<(31-i);//计算二进制中不为0时,该位的权值。 return sum; } int main() { int n; while(cin>>n) { cout<<get_binary(n)<<endl; }return 0; }
- The input has multicases and each case contains a integer N.
-
-
用位运算解决进制转化问题
最新推荐文章于 2024-10-01 20:11:33 发布