leetCode:二进制加法67::java

在这里插入图片描述
**思路:用计算机模拟人类的进位计算
第一步:让遍历字符串的顺序和二进制取值计算的顺序一致,所以逆序遍历字符串
第二步:取出对应位上的值进行计算 number1 + number2 + sign(前一个是否进位)
第三步:判断第二步的计算是否要进位,因为这是二进制最大为1 当值 >= 2时说明此时发生了进位,sign + 1,在和在对2取余,如果number1,2,sign都为3此时这个位应该为1 .(3% 2 = 1)
第四步:最后判断在计算时最后是否发生进位,看sign进位标志是否> 1,比1大直接追加进来 **
在这里插入图片描述

/**
 * FileName: Binary_Dome67_02
 * Author:   86186
 * Date:     2022/3/11 22:54
 * Description: Binary_Dome67_02
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.cq.Dome;

/**
 * 〈一句话功能简述〉<br> 
 * 〈Binary_Dome67_02〉
 *
 * @author Hacker
 * @create 2022/3/11
 * @since 1.0.0
 */
public class Binary_Dome67_02 {
    public static void main(String[] args) {
        String s1 = "101";
        String s2 = "100";
        int s1Sum;//二进制中的每一位的值
        int s2Sum;
        int s1Index = s1.length() - 1;
        int s2Index = s2.length() - 1;
        int i = 0;
        int sum;
        StringBuffer st = new StringBuffer();//StringBuffer是字符串变量,它的对象是可以扩充和修改的。
        int sign = 0;//表示进位
       while(s1Index >= 0 || s2Index >= 0){
            if(s1Index >= 0){
                s1Sum = s1.charAt(s1Index) - '0';//下标从最高的开始让读取的顺序和二进制计算取值的顺序一致
            }else{
                s1Sum = 0;
            }
            if(s2Index >= 0){
                s2Sum = s2.charAt(s2Index) - '0';
            }else{
                s2Sum = 0;//说明此时第二个二进制位数不足补零
            }
            sum = s1Sum + s2Sum + sign;
            if(sum >= 2){
                sign = 1;//进位标志也要加1
                st.append(sum % 2);//append()是向字符数组中追加
                //为啥% 2:通过二进制之间的运算是从第一个二进制取一位,第二个二进制位取一位 两者相加还要加进位,开始没有进位是0
            }else{
                sign = 0;//此时无进位
                st.append(sum);
            }
            s1Index --;
            s2Index --;

        }
        if(sign > 0){//如果循环已经结束即是两个二进制最后一位相加产生进位
            st.append(sign);

        }

        System.out.println(st.reverse().toString());//转位字符串输出

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值