9C - Hexadecimal's Numbers

問題

自然数nが与えられる。各桁が0と1だけで表される数が、1からnの範囲にいくつあるか答えよ。(n<=10^9)

解法

2進表記を10進数とみなした数を作って比較する。

コード

int tob(int n){
  int b = 0;
  stack<int> stk;
  while(n){
    stk.push(n%2);
    n/=2;
  }
  while(!stk.empty()){
    b = b*10 + stk.top(); stk.pop();
  }
  return b;
}
int main(){
  int n;
  cin>>n;
  FOR(ans,2,1024){
    int bnum = tob(ans);
    if(bnum > n){
      cout<<ans-1<<endl;
      break;
    }
  }
  return 0;
}