我需要计算一个整数的二进制表示形式中1的数量。 这两个要求是:
1)必须使用表查找 2)必须使用XOR按位运算符
到目前为止,我认为我可以进行表查找:
const generateLookupTable = (int) => {
const range = Array.from({length: int}, (x,i) => i);
const toBinary = (table, i) => {
const binary = (i >>> 0).toString(2);
table[i] = binary;
return table;
}
const lookupTable = range.reduce(toBinary, {})
return lookupTable;
};
这将打印出类似以下内容的内容:
generateLookupTable(7)
{0: "0", 1: "1", 2: "10", 3: "11", 4: "100", 5: "101", 6: "110"}
我很困惑如何使用XOR解决这个问题(或者为什么我什至要使用查找表)。我觉得我可以轻松地解决此问题,方法是将int转换为二进制,然后循环遍历每个字符并求和1。但是,这些要求使其变得困难。
答案 0 :(得分:2)
这只是部分提示,但评论太长。使用XOR可以做的一件事是找到最右边的1。然后可以减去这个并在保持计数的情况下再次进行。这将告诉您一个数字中有多少个::
def some_action
value_1 = yield step_1
value_2 = yield step_2(value_1)
return yield(step_3(value_2))
end
def step_1
if condition
Success(some_value)
else
Failure(:some_error_code)
end
end
def step_2
if condition
Success(some_value)
else
Failure(:some_error_code_2)
end
end
也许有点帮助。不确定指示内容到底是什么。