void  init()
{
    f[
0 ][ 0 ] = 1 ;
    
int  i,j;
    
for (i = 1 ;i <= 31 ;i ++ )
    {
        f[i][
0 ] = f[i - 1 ][ 0 ];
        
for (j = 1 ;j <= i;j ++ )
            f[i][j]
= f[i - 1 ][j] + f[i - 1 ][j - 1 ];
    }
}
int  calc( int  x, int  k) // 计算[0x]里含有k个1的数的个数
{
    
int  i;
    
int  tol = 0 ,ans = 0 ;
    
for (i = 31 ;i >= 0 ;i -- )
    {
        
if (x & ( 1 << i))
        {
            x
^= ( 1 << i);
            ans
+= f[i][k - tol];
            tol
++ ;
            
if (tol > k)
                
break ;
        }
            
    }
    
if (tol + x == k)
        ans
++ ;
    
return  ans;
}