二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。
在这里插入图片描述

class Solution {
    public String addBinary(String a, String b) {
      StringBuffer str;
        int length;
        //将a、b最大字符串值付给StringBuffer
        if(a.length()>b.length()){
            length=b.length();
            str=new StringBuffer(a);
            //将a b对应值相加 赋值给str,出现的值最高可能为2
            for(int i=str.length()-1,j=b.length()-1;j>=0;j--,i--){
                int temp=0;
                //str.charAt(i)-'0' 将char转化为int
                temp=(str.charAt(i)-'0')+(b.charAt(j)-'0');
 				//(char)(temp+'0'))将 int转换为char
                str.setCharAt(i,(char)(temp+'0'));
                
            }
        }
        else{
            str=new StringBuffer(b);
            length=a.length();
            for(int i=str.length()-1,j=a.length()-1;j>=0;j--,i--){
                int temp=0;
                temp=(str.charAt(i)-'0')+(a.charAt(j)-'0');
 
                str.setCharAt(i,(char)(temp+'0'));
                
            }
        }
        //str保存了所有a、b的累加值。
        for(int k=str.length()-1;k>0;k--){
        	//如果值为2,则需要进1
             if(str.charAt(k)=='2'){
             //先将本位子置0
                    str.setCharAt(k,'0');
             //取前一个位子的值与进位值1累加
                    int temp1=(str.charAt(k-1)-'0')+1;
             //将累加后的值赋值给前一个位子。
                    str.setCharAt(k-1,(char)(temp1+'0'));
             }
             //在累加过程中会出现值为3的位子,则将本位子置1,然后进1
             if(str.charAt(k)=='3'){
            	 str.setCharAt(k,'1');
                 int temp1=(str.charAt(k-1)-'0')+1;
                 str.setCharAt(k-1,(char)(temp1+'0'));
            }
             
        }
        //第一个位子若产生进位需要单独操作,插入一个1
        if(str.charAt(0)=='2'){
            str.setCharAt(0,'0');
            str.insert(0,'1');
        }else if(str.charAt(0)=='3'){
            str.setCharAt(0,'1');
            str.insert(0,'1');
        }
         System.out.print(str.toString());
        return str.toString();
        
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值