求一個二進制串mod 3的餘數
這是某BAT公司技術面三面的一道代碼題目,沒做出來,現在整理一波
首先,第一個思路是將這個二進制串轉換爲十進制,然後再進行計算,但是這個肯定不是面試官想要的答案,對於很長的二進制串不能轉換爲十進制數字。
下面講第二個思路,狀態機(其實可用於求mod任何數的情況)
整個狀態機分爲三個狀態,0,1,2,分別代表三種餘數情況,從二進制串的第一位開始讀,如果爲0,則從0開始,下面讀到一個1,則轉換到狀態1(相當於0*2+1),讀到的還是0則轉換到狀態0(相當於0*2+0),以此類推,形成狀態機如下:
根據這個狀態機寫代碼就很容易啦。