写し間違ってた。

long howMany(int k) {
 long a = 1, b = 0;
 for (int i = 0; i < 32; i++) {
  if ((k & (1 << i)) != 0)
   a += b;
  else
   b += a;
 }
 return a;
}