问题:
package com.example.demo; public class Test67 { /** * 二进制求和 * 思路: * 1、先获取两个二进制字符串的长度,用于补齐为等长字符串,便于两两相加 * 2、定义一个overFlow来表名两两相加是否已经满足进1 * 3、定义循环,总字符串的最后开始计算(也就是低位开始计算) * 4、将overFlow+ a1 + b1 - 0 --->这个值代表运算出的结果 * 5、将运算出的结果和‘1‘ 和 ’3‘ 比较(因为二进制相加只有四种情况,这两种情况是需要进位的) * '0' + '0' --> '0' * '1' + '0' --> '1' * '1' + '1' --> '2' * '1' + '1' + overFlow --> '3' * 6、使用stringbuffer保存每一次运算后的结果 * 7、循环完成之后,需要判断最后一次运算是否满足进位,满足的话,需要单独处理 * 8、最后reverse翻转字符串即为结果 */ public String addBinary(String a, String b) { StringBuffer sb = new StringBuffer(); int len1 = a.length(); int len2 = b.length(); // 向将两个字符串补齐 while (len1 < len2) { a = '0' + a; len1++; } while (len2 < len1) { b = '0' + b; len2++; } int overFlow = 0; int index = a.length() - 1; // 从低位两两相加,并计算最终的二进制值,append到stringbuffer中 while (index >= 0) { char c = a.charAt(index); char c1 = b.charAt(index); int sum = c + c1 - '0' + overFlow; if (sum >= '2') { overFlow = 1; } else { overFlow = 0; } sb.append((sum == '1' || sum == '3') ? '1' : '0'); index--; } // 循环完成之后,需要判断最后一次运算是否满足进位,满足的话,需要单独处理 if (overFlow == 1) { sb.append('1'); } return sb.reverse().toString(); } public static void main(String[] args) { Test67 t = new Test67(); String s = t.addBinary("11", ""); System.out.println(s); } }