本题判断无解的时候要判断该数是否为 2 的 k 次幂,我的做法是预处理出 2 的次幂数表。
看题解发现可以用 lowbit
操作。
lowbit操作
int lowbit(int x) {return x & (-x);}
根据补码原理,该操作可以求出来 X 最靠右的 \(1\) 构成的数。
判断 \(x\) 是否为 \(2^k\)
显然,一个数为 \(2^k\) 当且仅当该数在二进制上仅一位为 \(1\),也就是说 lowbit 出来的结果是等于 x 的。
即 if(lowbit(x) == x)