poj 2453 - たしかに簡単な問題なのかもしれないが。
2007/11/26
java
poj
2453 -- An Easy Problem
いろいろビットをさわって解こうとしていましたが、何度かWrongAnswerでした。簡単な問題とはありますが....
で、どうやって解いたかといいますと、ビットカウントとして、与えられた値を1づつカウントアップして、その際に、ビットカウントが一緒なら答えというふうにしました。
static int r(int a){
int cnt_bit = bitCount(a);
int m = a;
while(true){
m += 1;
if(cnt_bit == bitCount(m)) break;
}
return m;
}
static int bitCount(int r){
BigInteger integer = BigInteger.valueOf(r);
return integer.bitCount();
}
int cnt_bit = bitCount(a);
int m = a;
while(true){
m += 1;
if(cnt_bit == bitCount(m)) break;
}
return m;
}
static int bitCount(int r){
BigInteger integer = BigInteger.valueOf(r);
return integer.bitCount();
}
javaなので、BigIntegerのbitCountを使用しました。
この BigInteger の 2 の補数表現内の、符号ビットと異なるビットの数を返します。このメソッドは BigInteger 上にビットベクトル形式の設定を実装する場合に便利です。javadoc
: