67.二進位制求和
阿新 • • 發佈:2018-12-24
這題程式碼我寫的又長又臭,我自己都快看不下去了。。如果有人搜到這篇部落格的話,我估計你是看不懂的。。
這傻逼網友寫的什麼垃圾
-------------------------------------------------------------------------------------------------------------------
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1
和 0
。
示例 1:
輸入: a = "11", b = "1" 輸出: "100"
示例 2:
輸入: a = "1010", b = "1011" 輸出: "10101"---------------------------------------------------------------------------------------------------------------------------
public static String addBinary(String a, String b) { char[] longarr = a.toCharArray(); char[] smallarr = b.toCharArray(); //給定 字串差,和最長的字串的長度的初值 int cha = 0; StringBuilder sb = new StringBuilder(); int count = 0; int j = longarr.length; if (a.length() != b.length()) { //當兩個字串長度不一樣的時候,進行改變 j = (a.length() > b.length()) ? b.length() : a.length(); cha = Math.abs(a.length() - b.length()); longarr = (a.length() > b.length()) ? a.toCharArray() : b.toCharArray(); smallarr=(a.length() > b.length()) ? b.toCharArray() : a.toCharArray(); } for (int i = j - 1; i >= 0; i--) { if (longarr[cha + i] == '1' && smallarr[i] == '1') { //當字串都是1的時候 if (count == 0) { //count是儲存進位的1, sb.append(0 + count); count++; } else { //當count=1,且字串兩位都是1的時候, count值繼續為1; sb.append(0 + count); } } else if (longarr[cha + i] == '0' && smallarr[i] == '0') { sb.append(0 + count); count = 0; } else { //這裡是 字串一位是0一位是1的時候 if (count == 1) { sb.append(1 - count); count = 1; } else { sb.append(1); } } }//上面只處理了長字串 的後幾位字元 if (cha != 0) { //這段是開始處理長的字串 還未處理完畢的部分 for (int i = cha - 1; i >= 0; i--) { if (longarr[i] == '0') { sb.append(0 + count); count = 0; } else { if (count == 1) { sb.append(1 - count); count = 1; } else { sb.append(1); } } } } if (count == 1) { //如果到最後還有count=1 sb.append(1); } sb.reverse();//反轉 return sb.toString(); }