题目来源:二进制求和
题目描述:
给定两个二进制字符串,返回他们的和(用二进制表示)。
样例
a = 11
b = 1
返回 100
Java代码:
public String addBinary(String a, String b) {
// Write your code here
char[] a1 = a.toCharArray();
char[] b1 = b.toCharArray();
int longth = (a.length()>b.length()?a.length():b.length()) + 1;
int shortlongth = a.length()<b.length()?a.length():b.length();
char[] result = new char[longth];
if (a.length()>b.length()) {
for (int i = 0; i < result.length-1; i++) {
result[result.length-1-i] = a1[a1.length-1-i];
}
}else {
for (int i = 0; i < result.length-1; i++) {
result[result.length-1-i] = b1[b1.length-1-i];
}
}
result[0]='0';
int jinwei = 0,nowstation = 0;
while (nowstation < shortlongth) {
if (a1[a1.length-1-nowstation]=='1'&&b1[b1.length-1-nowstation]=='1') {
if (jinwei==0) {
result[result.length-1-nowstation] = '0';
}else {
result[result.length-1-nowstation] = '1';
}
jinwei = 1;
nowstation++;
}else if (a1[a1.length-1-nowstation]!='1'&&b1[b1.length-1-nowstation]!='1') {
if (jinwei == 0) {
result[result.length-1-nowstation] = '0';
}else {
result[result.length-1-nowstation] = '1';
}
jinwei = 0;
nowstation++;
}else {
if (jinwei == 0) {
result[result.length-1-nowstation] = '1';
jinwei = 0;
}else {
result[result.length-1-nowstation] = '0';
jinwei = 1;
}
nowstation++;
}
}
while (nowstation < result.length&&jinwei==1) {
if (result[result.length-1-nowstation] =='1') {
result[result.length-1-nowstation] = '0';
jinwei = 1;
}else {
result[result.length-1-nowstation] = '1';
jinwei = 0;
}
nowstation++;
}
if (result[0] == '1') {
return String.valueOf(result);
}
return String.valueOf(result,1,result.length-1);
}