假设我们有两个数字,我想要写程序,打印后续的公共位,这些数字出现在这些数字中 或
1000010111001010100011110001010010101001011101001001001
0101 01110011011001010111101111111010001001011
其中一个答案应该是0101
但约束是我们应该进行按位运算和数学运算
而不是字符串问题(最常见的后续)
感谢
答案 0 :(得分:1)
common_ones = a & b;
common_zeros = ~a & ~b;
common_sequences = common_ones | common_zeros;
例如:
a 1000010111001010100011110001010010101001011101001001001
b 0000000000010101110011011001010111101111111010001001011
c 0111101000100000101111010111111010111001011000111111101
清除您可以使用的单个位序列:
c = c & ( c >> 1 );
c = c | ( c << 1 );
c 0111100000000000001111000111111000111000011000111111100
目前尚不清楚这是否是您想要的,但这是一种快速简便的方法,可以在两个值中找到相同位置的所有公共位序列。如果要在任何位置查找公共位序列,则需要将一个值旋转到每个位位置并执行上述测试。
答案 1 :(得分:0)
假设你有两个32位的整数a和b。将b中的位移位i,然后将它们包裹起来(使得右侧的位将在左侧进入)并将其与a进行对比。让我从0到31。这将给你32个结果。如果我的推理是正确的,那么具有最长公共子序列的结果应该是具有最多0的结果(例如,计数0可以在循环中完成)。如果没有,这至少应该是一个很好的起点。
答案 2 :(得分:0)
查看Sequitur - 算法。