组合数的题
一开始本来想纯暴力 结果超时了
后来想一共最多9位数 可以将1~2^9用十进制存到数组中 然后找到n的上界就ok了
#include <iostream>
using namespace std;
int bin[550];
int main()
{
for(int i = 1;i <= 512;i ++)
{
int tmp = 0;
for(int j = 10;j >=0;j --)
tmp = tmp*10 +((i>>j)&1);
bin[i] = tmp;
}
int n;
while(cin>>n)
{
int ans = 0;
int left = 1,right = 512;
while(left <= right)
{
int mid = (left + right) / 2;
if(bin[mid] <= n && bin[mid+1] >= n)
{
ans = mid;
if(bin[mid+1]==n)
ans ++;
break;
}
if(bin[mid] > n)
right = mid-1;
if(bin[mid] < n)
left = mid+1;
}
cout<<ans<<endl;
}
return 0;
}