1. 程式人生 > >67.二進位制求和

67.二進位制求和

這題程式碼我寫的又長又臭,我自己都快看不下去了。。如果有人搜到這篇部落格的話,我估計你是看不懂的。。

這傻逼網友寫的什麼垃圾再見

-------------------------------------------------------------------------------------------------------------------

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字 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();
	}