题目描述:Given two binary(二进制的)strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
For example,
a = "11"
b = "1"
Return "100".
public class Add_Binary {
//分解数字
public static void resolve(int num,ArrayList al)
{
while(num>=10)
{
int mid=num%10;
al.add(mid);
num/=10;
}
al.add(num);
}
//将较短的二进制数字最大位前补零,使两个数一样长
public static void SupplyZero(ArrayList al1,ArrayList al2)
{
if(al1.size()>al2.size())
{
while(al2.size()<al1.size())
{
al2.add(0);
}
}
if(al1.size()<al2.size())
{
while(al1.size()<al2.size())
{
al1.add(0);
}
}
}
public static void solve(String a,String b)
{
//现将字符串转化为数字形式
int Anum=Integer.parseInt(a);
int Bnum=Integer.parseInt(b);
//并将其存入数组
ArrayList<Integer> ala=new ArrayList<Integer>();
ArrayList<Integer> alb=new ArrayList<Integer>();
resolve(Anum,ala);
resolve(Bnum,alb);
//将短的数字补零直至和长的数字一样长
SupplyZero(ala,alb);
//将各位相加,前面已经使两个ArrayList长度一样
//result不仅作为结果保存集合,同样作为前一位所进上来的值的保存集合,所以要使result比两个数多一位。
//以防最后一位相加再进位。
ArrayList<Integer> result=new ArrayList<Integer>();
for(int i=0;i<=ala.size();i++)
{
result.add(0);
}
for(int i=0;i<ala.size();i++)
{
//mid就是该位前一位相加进上来的位
int mid=result.get(i);
//对每位相加,并将该位应该显示的答案放入结果集中
result.set(i,(ala.get(i)+alb.get(i)+mid)%2);
//将进上去的位数放入下一位中保存起来
result.set(i+1,(ala.get(i)+alb.get(i)+mid)/2);
}
//输出结果
for(int i=result.size()-1;i>=0;i--)
{
//有可能最后一位相加没有进位,所以要判断一下,不需要把原来的0输出。
if(i==result.size()-1&&result.get(i)==0)
continue;
System.out.print(result.get(i));
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String a=sc.next();
String b=sc.next();
solve(a,b);
}
}