7-1魔法の数式

非常に興味深い式:a-(a⊕x)-x = 0
ここで、⊕は2つの整数のビット単位の排他的ORを表します(プログラミングでは、⊕xはa ^ xとして表されます)。
ここで、xに関するより多くの方程式の非負の解を知る必要があります。

入力フォーマット:

入力の最初の行には、要求される桁数であるtが含まれています(1 <= t <= 1000)。
次のt行では、各行にa(0 <= a <= 2 ^ 30-1)が与えられます。

出力フォーマット:

与えられたaごとに、1行に数値nを出力します。これは、xの非負の解の総数です。

入力サンプル:

3
0
2
1073741823

サンプル出力:

1
2
1073741824

注:
XORの説明:
ビット単位の排他的-または2つのオペランドに対応する操作は、次の規則に従ってビットごとに計算されます:
0 ^ 0 = 0
0 1 = 1 ^
1 ^ 0 = 1
1 = 1 ^ 0
つまり、対応するビットの値が同じである場合、結果は0であり、同じでない場合の結果は1です。
例:9⊕5= 9 ^ 5 = 1001 ^ 0101 = 1100 = 12
ヒント:aが0の場合、x = 0が唯一のソリューションです
。aが2の場合、x = 0またはx = 2は両方のソリューションであるため、 2セットのソリューション。

簡単な分析:
题目中实则要求计算a⊕x=a-x,即当异或结果与减法结果相同时,x的非负解。
易知抑或若等于减,数x满足:x的二进制码为1的那一位在a中对应的那一位中也是1,这样1与1抑或得0,1-1也得0
即我们需计算所给a的二进制转化中有多少个1,然后通过排列组合求解即可
a的二进制有n个1,对应解即为2^n个
代码捞的一,此处就不展示了

おすすめ

転載: blog.csdn.net/weixin_45989486/article/details/108536945