POJ 2453
#include <iostream> using namespace std; int countBits(int n) { int count=0; //MSBから順に,立っているかチェック for (unsigned int mask=0x80000000; mask>0; mask>>=1) { if (mask & n) count++; } return count; } int main() { int n; while (true) { cin >> n; if (n == 0) break; int cn = countBits(n); do { n++; } while (countBits(n) != cn); cout << n << endl; } return 0; }
間違えたポイント
演算子の優先順位
if (mask & n > 0)
って書くと,if (mask & (n > 0))と解釈される?みたいではまった.
maskの最大値
(0 <= I <= 1000000)だから,32ビット全部やらなくていいか〜とおもってmask=0x80000(20ビット目)から始めてしまった.本当はI=1000000のときJは20ビット以上になる可能性があるので,これではダメ.結局32ビットやるようにした.
maskのビット数
unsigned intにしないと32ビット丸々使えない.