求一个二进制串mod 3的余数
这是某BAT公司技术面三面的一道代码题目,没做出来,现在整理一波
首先,第一个思路是将这个二进制串转换为十进制,然后再进行计算,但是这个肯定不是面试官想要的答案,对于很长的二进制串不能转换为十进制数字。
下面讲第二个思路,状态机(其实可用于求mod任何数的情况)
整个状态机分为三个状态,0,1,2,分别代表三种余数情况,从二进制串的第一位开始读,如果为0,则从0开始,下面读到一个1,则转换到状态1(相当于0*2+1),读到的还是0则转换到状态0(相当于0*2+0),以此类推,形成状态机如下:
根据这个状态机写代码就很容易啦。