題目
Add Binary
題目大意:給定兩個二進(jìn)制數(shù)的字符串字符串,返回它們的和的二進(jìn)制字符串。
開始的思路是將二進(jìn)制轉(zhuǎn)換成十進(jìn)制相加,再把和轉(zhuǎn)換成二進(jìn)制,結(jié)果輸入為
"10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"
"110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"
很自然地就溢出了,最后只能手動模擬相加過程。
代碼如下
public class Solution {
public String addBinary(String a, String b) {
String restr = "";//儲存相加的結(jié)果(倒序)
int length = a.length()>b.length()?a.length():b.length();//較長字符串長度
//在較短字符串前加0,使兩個字符串一樣長
String chang = "";
for (int i = 0;i<(a.length()>b.length()?a.length():b.length())-(a.length()<b.length()?a.length():b.length());i++)
chang = chang + 0;
if (a.length()>b.length()){
chang = chang + b;
b = chang;
}
else {
chang = chang + a;
a = chang;
}
int adc = 0;//儲存進(jìn)位
//手動模擬相加
for (int i=0;i<length;i++){
if(a.charAt(length-i-1) + b.charAt(length-i-1) + adc - 2 * '0' == 3){
adc = 1;
restr = restr + 1;
}
else if (a.charAt(length-i-1) + b.charAt(length-i-1) + adc - 2 * '0' == 2){
adc = 1;
restr = restr + 0;
}
else if (a.charAt(length-i-1) + b.charAt(length-i-1) + adc - 2 * '0' == 1){
adc = 0;
restr = restr + 1;
}
else if (a.charAt(length-i-1) + b.charAt(length-i-1) + adc - 2 * '0' == 0){
adc = 0;
restr = restr + 0;
}
}
//當(dāng)進(jìn)位為1說明結(jié)果還要加1
if (adc == 1)
restr = restr + 1;
//將倒序的結(jié)果順序變?yōu)檎? String str = "";
for (int i=0;i<restr.length();i++)
str = str + restr.charAt(restr.length()-i-1);
return str;
}
}