这是我写这道题的时候根据别人的代码添加了一些注释(有些是别人的,我把自己不懂的理解后注释出来)而且我觉得这个人的解法挺不错的
···
package leetCode;
public class AddBinary
{
public static void main(String[] args)
{
String a="1011";
String b="1010";
int maxlen=Math.max(a.length(), b.length());
//其实刚开始是的时候我觉得吧,长度可以不考虑,大概是写惯了,(长期以来我们默认了短的数字最高位是有0的),所以不考虑长度的话,那个长的数字最高位就没办法计算,这也是为什么下面要补0
StringBuilder ss=new StringBuilder();
int carry=0;
//System.out.println((int)'0');得到结果是48;ASCII表中char '0'表示的数值是整型的48;所以String。charAt返回的是字符的ASCII码,减去‘0’才是整型的0,1,
for(int i=0;i<maxlen;i++)
{//从右边开始逐位取出字符串 a、b 的字符值 tempA 和 tempB,如果长度不足,则用0替代
int tempA=a.length()>i?a.charAt(a.length()-i-1)-'0':0;
int tempB=b.length()>i?b.charAt(b.length()-i-1)-'0':0;
ss.insert(0, (tempA+tempB+carry)%2);//在最左侧插入相加结果;‘/’除,‘%’取模;
carry=tempA+tempB+carry>1?1:0;//得到进位
}
if(carry==1)
{
ss.insert(0, 1);//如果最高位有进位,则最高位还要加一位 1
}
//return ss.toString();
System.out.println(ss.toString());
}
}
···