【计算二进制数】-Java实现

package LESSION;
/*程序问题注释开始
        程序的版权和版本声明部分
        Copyright © 2024,DNUI-stu
        All rights reserved.
        文件名称: Leetcode练习题
        作 者: 山北为谷
        完成日期: 2024 年 08月 19日
        版 本 号: 001
        对任务及求解方法的描述部分
        问题描述:
是用来实现两个二进制字符串的加法。它接收用户通过标准输入(通常是键盘)输入的两个二进制数(以字符串形式),然后计算并输出这两个二进制数相加的结果,同样以字符串形式表示。

*/
import java.util.Scanner;

public class Main{
    
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        String a = scanner.nextLine();  
        String b = scanner.nextLine();  
        scanner.close();  
          
        String sum = addBinaryStrings(a, b);  
        System.out.println(sum);  
    }  
      
    public static String addBinaryStrings(String a, String b) {  
        StringBuilder result = new StringBuilder();  
        int carry = 0  ;
        int i = a.length() - 1;  
        int j = b.length() - 1;
        while (i >= 0 || j >= 0 || carry > 0) {  
            int digitA = i >= 0 ? a.charAt(i) - '0' : 0;  
            int digitB = j >= 0 ? b.charAt(j) - '0' : 0;  
            int sum = digitA + digitB + carry;
            // 计算当前位的值和进位  
            result.append(sum % 2);  
            carry = sum / 2;
            i--;  
            j--;  
        }
        // 反转结果字符串,因为我们是从最低位开始构建的  
        return result.reverse().toString();  
    }  
}

ai解释:

这个程序是用来实现两个二进制字符串的加法。它接收用户通过标准输入(通常是键盘)输入的两个二进制数(以字符串形式),然后计算并输出这两个二进制数相加的结果,同样以字符串形式表示。

下面是程序的详细工作流程:

初始化:程序首先通过Scanner类创建一个扫描器对象scanner,用于从标准输入读取数据。
输入数据:使用scanner.nextLine()方法连续读取两行输入,分别赋值给字符串变量a和b。这两行输入被假定为两个二进制数(由0和1组成的字符串)。
关闭扫描器:使用scanner.close()方法关闭扫描器对象,这是一个好习惯,尤其是在处理完输入之后,可以释放与之关联的资源。
执行加法:调用addBinaryStrings(a, b)方法,将输入的两个二进制字符串作为参数传递。这个方法会计算并返回这两个二进制数相加的结果,同样以字符串形式。
输出结果:将addBinaryStrings方法的返回值(即两个二进制数相加的结果)输出到标准输出(通常是控制台)。
addBinaryStrings方法的工作原理:

创建一个StringBuilder对象result,用于构建最终的二进制字符串结果。
初始化进位carry为0,以及两个索引i和j,分别指向输入字符串a和b的最后一个字符(即最低位)。
使用一个while循环,条件为i或j中至少有一个索引大于等于0,或者进位carry大于0。这是必要的,因为即使两个字符串长度不同,或者最后一个加法运算产生了进位,我们也需要继续处理。
在每次循环中,从a和b中取出当前索引位置的字符(如果索引超出字符串长度,则视为0),将它们转换为整数,加上进位carry,得到当前位的和。
将当前位的和对2取余的结果添加到result字符串的末尾(即当前位的值),然后计算进位(即当前位的和除以2的商)。
将索引i和j减1,以移动到下一个较低位。
当循环结束时,result中包含了从最低位到最高位的二进制结果,但由于我们是从最低位开始构建的,因此需要调用result.reverse()来反转字符串,然后调用toString()方法将其转换为字符串并返回。
这样,程序就实现了两个二进制字符串的加法操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值