求一个二进制串mod 3的余数

求一个二进制串mod 3的余数

      这是某BAT公司技术面三面的一道代码题目,没做出来,现在整理一波

       首先,第一个思路是将这个二进制串转换为十进制,然后再进行计算,但是这个肯定不是面试官想要的答案,对于很长的二进制串不能转换为十进制数字。

       下面讲第二个思路,状态机(其实可用于求mod任何数的情况)

       整个状态机分为三个状态,0,1,2,分别代表三种余数情况,从二进制串的第一位开始读,如果为0,则从0开始,下面读到一个1,则转换到状态1(相当于0*2+1),读到的还是0则转换到状态0(相当于0*2+0),以此类推,形成状态机如下:

根据这个状态机写代码就很容易啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章