題目描述: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 }