首页 > 代码库 > nyoj412_bitset_

nyoj412_bitset_

Same binary weight

时间限制:300 ms  |  内存限制:65535 KB
难度: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.
样例输入
17174712555555
样例输出
171881117555557
#include <iostream>#include <cstdio>#include <bitset>using namespace std;int main(){    int n;    while(scanf("%d",&n)!=EOF){        bitset<32> b(n);        int j;        int cou=0;        for(int i=0;i<32;i++){            if(b[i]){                cou++;            }            if(b[i]&&!b[i+1]){                j=i;                b[i]=false;                b[i+1]=true;                break;            }        }        cou--;            for(int k=0;k<cou;k++){                b[k]=true;            }            for(int k=cou;k<j;k++){                b[k]=false;            }        printf("%ld\n",b.to_ulong());        //cout<<b.to_ulong()<<endl();    }    return 0;}

 

nyoj412_bitset_