手撕代碼:判斷二進制串除以3的餘數

題目描述:spa

給定一個長二進制串,求其除以3的餘數code

 

思路分析:blog

這裏涉及到狀態機,因爲除以三的餘數只多是0,1,2。因此狀態機就有三個狀態。如今逐個遍歷二進制串,初始餘數爲0,當遇到1時,狀態轉到1,遇到0時狀態仍爲0。對於狀態1,判斷分別遇到0和1的狀態變換:遇到0,即餘數爲2轉到狀態2;遇到1,即餘數爲0轉到狀態0。能夠發現,對於每一個數在其後添加0至關於乘2,加1至關於乘2加1。string

 

代碼:class

 1 int numRest(string s)
 2 {
 3     int n = s.length();
 4     int res=0;
 5     for(int i=0; i<n; i++)
 6     {
 7         if(res==0)
 8         {
 9             if(s[i]=='0')
10                 res=0;
11             else
12                 res=1;
13         }
14         else if(res==1)
15         {
16             if(s[i]=='0')
17                 res = 2;
18             else
19                 res=0;
20         }
21         else
22         {
23             if(s[i]=='0')
24                 res=1;
25             else
26                 res=2;
27         }
28     }
29     return res;
30 }
相關文章
相關標籤/搜索