那么对于任何一个二进制数,我们都可以这样求出比他小或者相等的二进制数有多少满足要求.1. 所有位数比他少的都可以.2. 与他同位的,对于他每一个是 1 的数位,这一位之前的数位不变,自己变为 0,之后的随便填,可以达到要求的可以.
对于第二类,这样讨论会补充不漏地得到所有可行数.
比如对于 1001011,属于第一类的数有:1xxxxx1xxxx1xxx1xx1x1 属于第二类的数有:1000xxx100100x1001011(←这个数就是本身,也要算进来) 然后再用例子中的组合数学方法求出有多少种填法.
int ans=0one=1len=0s0=0;
len=i+1;
if(s0>=(len+1)/2&&x!=0&&x!=1)ans++;