之前做过的一道面试题,要求:输入两个二进制字符串,返回它们的和(用二进制表示)。
代码:
import java.util.Scanner;
public class Test {
//输入两个二进制字符串,返回它们的和(用二进制表示)。
//输入为 非空 字符串且只包含数字 1 和 0。
//示例:
//输入: a = "1010", b = "1011"
//输出: "10101"
public static String getCount(String str1, String str2){
StringBuffer strSum = new StringBuffer();
int last1 = str1.length()-1;//取二进制数的最后一位字符的下标
int last2 = str2.length()-1;//取二进制数的最后一位字符的下标
int sum = 0;//进位默认为0
while(last1>=0 || last2>=0 || sum !=0){
//获取当前位的字符,当字段长度不一致时,向上补0
int a = last1>=0 ? str1.charAt(last1)-'0' : 0;
int b = last2>=0 ? str2.charAt(last2)-'0' : 0;
int c = a+b+sum;//当前位的值,等于两数相加再加上进位值
sum = c>=2 ? 1 : 0;//逢二进一,得出最新的进位值
c = c>=2 ? c-2 : c;//二进制只能有1和0,为2是10,为3是11,得出当前位的值为c-2
strSum.append(c);
last1--;
last2--;
}
return strSum.reverse().toString();
}
public static void main(String[] args) {
//输入两个二进制字符串,返回它们的和(用二进制表示)。
//输入为 非空 字符串且只包含数字 1 和 0。
//示例:
//输入: a = "1010", b = "1011"
//输出: "10101"
Scanner nums = new Scanner(System.in);
System.out.println("请输入第一个二进制数: ");
String num1 = nums.next();
System.out.println("请输入第二个二进制数: ");
String num2 = nums.next();
System.out.println("两个二进制的和为:" + getCount(num1, num2));
}
}