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)//計算[0
x]里含有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;
}
{
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)//計算[0

{
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;
}