【Java题解】以二进制加法的方式来计算两个内容为二进制数字的字符串相加的结果


🎉欢迎大家收看,请多多支持🌹
🥰关注小哇,和我一起成长🚀个人主页🚀
👑目录
分析:🚀
数字层面分析⭐
字符串层面分析⭐
代码及运行结果分析:🚀
代码:⭐
运行结果:编辑⭐
具体分析:⭐
题目

分析:
数字层面分析
先来看在二进制中 1+0==1,0+0==0,1+1==0
如果两个多位的二进制数相加,就还要考虑是否向前一位进1的问题,显然上面的三个式子中只有 1+1==0是需要向前进一位的。
考虑了向前进位的问题,还要考虑当前位的数字相加是否要多加一个来自上一位进的1(即当前位的上一位如果进1了的话,那么当前位相加是需要加上这个进的 1):
| 前一位没有进 1 | 前一位进 1 | |
|---|---|---|
| 1和0相加 | 1+0 == 1,不向前一位进1 | 1+0+1 == 0,向前进1 |
| 1和1相加 | 1+1 == 0,向前进1 | 1+1+1 == 1,向前进1 |
| 0和0相加 | 0+0 == 0,不向前进1 | 0+0+1 == 1,不向前进1 |
因此,我们可以知道1+0、0+0、1+1这三种情况的结果都有两种情况,
并且,当 1+1 相加的时候,一定会向前进一位,
0+0 相加的时候,一定不会进一位,
而 0+1 时,就会有进一位和不进一位两种情况,即它的上一位的两个数相加进了一位,那么0+1才会向前进一位;它的上一位两个数没有向前进位,那么0+1就不会进位
字符串层面分析
计算数字时我们都会右对齐来计算,但是在代码中我们习惯从左到右来分析解决问题,因此我们可以将字符串反转,计算完后在反转回来就能够得到原来的字符串相加的结果
这里需要用到StringBuilder类和StringBuffer类的reverse()方法来反转字符串,它会修改调用的对象,而不是新建一个对象:
str.reverse();//将字符串str反转
两个字符串的长度如果不相同,我们可以给较短的字符串反转之后再末尾添加上'0'来计算,并且不会影响结果。
str.append("hello");//给字符串str尾部追加一个hello
代码及运行结果分析:
代码:
import java.util.Scanner;
public class Test {public static void main(String[] args) {//:输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,// 加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。//字符串长度不超过100Scanner in = new Scanner(System.in);while(in.hasNextLine()){String str1 = in.nextLine();String str2 = in.nextLine();Solution solution = new Solution();String ret = solution.solve(str1,str2);System.out.println(ret);}}static class Solution {public String solve(String str1, String str2) {int len1 = str1.length();int len2 = str2.length();int maxLen = Math.max(len1,len2);StringBuilder strB1 = new StringBuilder(str1).reverse();StringBuilder strB2 = new StringBuilder(str2).reverse();StringBuilder str = new StringBuilder();Boolean flag = false;//代表不进位for(int i = 0;i < maxLen;i++){char ch1 = i< len1?strB1.charAt(i):'0';char ch2 = i< len2?strB2.charAt(i):'0';if(ch1=='0'&&ch2=='0'){str.append(flag?'1':'0');flag = false;//相加为0,不用进一}else if(ch1 == '1'&& ch2 == '1'){str.append(flag?'1':'0');flag = true; //相加要进1}else{str.append(flag?'0':'1');//注意}}if(flag == true){str.append('1');}return str.reverse().toString();}}
}
运行结果:
可以看到我们成功解决了这个题目
具体分析:
StringBuilder strB1 = new StringBuilder(str1).reverse();StringBuilder strB2 = new StringBuilder(str2).reverse();
这两行代码就第一行来说,
new StringBuilder(str1)创建了一个StringBuilder类的对象,并将对象的内容初始化为字符串str1的内容,然后再.reverse()将内容反转。strB1变量引用了这个对象。
char ch1 = i< len1?strB1.charAt(i):'0';
char ch2 = i< len2?strB2.charAt(i):'0';
这两行代码是来判定是否需要给当前为添加一个0:

注意相加过程的0和1相加的代码,由前面的数字层面分析我们知道,0和1相加是否需要进1取决于它的上一位相加是否进1,所以我们不需要在这里写flag = true或者false,写了就会错
if(ch1=='0'&&ch2=='0'){str.append(flag?'1':'0');flag = false;//相加为0,不用进一
}else if(ch1 == '1'&& ch2 == '1'){str.append(flag?'1':'0');flag = true; //相加要进1
}else{str.append(flag?'0':'1');//注意
}
代码的后面写这个,是因为当字符串最后两个0或1相加完后,如果是两个1相加就还要再进1
if(flag == true){str.append('1');}
🎉🎉本次题目分析结束啦,感谢支持!
如有高见,来评论区发言吧~🌹
🥰喜欢请三连哦❤️,再次感谢!

相关文章:
【Java题解】以二进制加法的方式来计算两个内容为二进制数字的字符串相加的结果
🎉欢迎大家收看,请多多支持🌹 🥰关注小哇,和我一起成长🚀个人主页🚀 👑目录 分析:🚀 数字层面分析⭐ 字符串层面分析⭐ 代码及运行结果分析:Ƕ…...
docker -v 到底和那个一样?type=volume还是type=bind的解释
逐行通俗详细的解释下这个代码“#!/usr/bin/env bash # # This script will automatically pull docker image from DockerHub, and start a daemon container to run the Qwen-Chat web-demo.IMAGE_NAMEqwenllm/qwen:2-cu121 QWEN_CHECKPOINT_PATH/path/to/Qwen-Instruct PORT…...
linux自动化构建工具--make/makefile
目录 1.make/makefile介绍 1.1基本认识 1.2依赖关系、依赖方法 1.3具体操作步骤 1.4进一步理解 1.5默认设置 1.6make二次使用的解释 1.7两个文件的时间问题 1.8总是被执行 1.9特殊符号介绍 1.make/makefile介绍 1.1基本认识 make是一个指令,makefile是一…...
学习记录——day15 数据结构 链表
链表的引入 顺序表的优缺点 1、优点:能够直接通过下标进行定位元素,访问效率高,对元素进行查找和修改比较快 2、不足:插入和删除元素需要移动大量的元素,效率较低 3、缺点:存储数据元素有上限,当达到MAX后,就不能再…...
vue3实现在新标签中打开指定的网址
有一个文件列表,如下图: 我希望点击查看按钮的时候,能够在新的标签页面打开这个文件的地址进行预览,该如何实现呢? 比如: 实际上要实现这个并不难,参考demo如下: 首先&#x…...
Qt基础 | QSqlTableModel 的使用
文章目录 一、QSqlTableModel 的使用1.主窗口MainWindow类定义2.构造函数3.打开数据表3.1 添加 SQLite 数据库驱动、设置数据库名称、打开数据库3.2 数据模型设置、选择模型、自定义代理组件、界面组件与模型数据字段间的数据映射 4.添加、插入与删除记录5.保存与取消修改6.设置…...
RPA软件-影刀使用
流程自动化 影刀将操作进行抽象,分为一下几个对象: 网页自动化 (1) 网页自动化应用场景:网页操作、数据抓取 (2) 网页操作:基础操作-指令操作,智能操作-关联元素&#…...
HarmonyOS NEXT零基础入门到实战-第四部分
自定义组件: 概念: 由框架直接提供的称为 系统组件, 由开发者定义的称为 自定义组件。 源代码: Component struct MyCom { build() { Column() { Text(我是一个自定义组件) } } } Component struct MyHeader { build() { Row(…...
vue2获取视频时长
使用HTML5的video标签和JavaScript: <template><video ref"video" autoplay controls loop muted loadedmetadata"getVideoDuration"><source src"https://desktop-yikao.oss-cn-beijing.aliyuncs.com/avatar/kaissp.mp4&q…...
Linux中进程的控制
一、进程的创建 1、知识储备 进程的创建要调用系统接口,头文件 #include<unistd.h> 函数fork() 由于之前的铺垫我们现在可以更新一个概念 进程 内核数据结构(task_struct, mm_struct, 页表....) 代码 数据 所以如何理解进程的独…...
【源码】Sharding-JDBC源码分析之JDBC
Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...
Java | Leetcode Java题解之第273题整数转换英文表示
题目: 题解: class Solution {String[] singles {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};String[] t…...
数据结构之深入理解简单选择排序:原理、实现与示例(C,C++)
文章目录 一、简单选择排序原理二、C/C代码实现总结: 在计算机科学中,排序算法是一种非常基础且重要的算法。简单选择排序(Selection Sort)作为其中的一种,因其实现简单、易于理解而受到许多初学者的喜爱。本文将详细介…...
使用vscode搜索打开的文件夹下的文件
右键空白处打开命令面板 摁一次删除键,删除掉图中的大于号 这样就能够找到例化的模块,文件具体在哪个位置,然后打开了...
力扣778.水位上升的泳池中游泳
力扣778.水位上升的泳池中游泳 二分 bfs class Solution {int dx[4] {1,0,-1,0},dy[4] {0,1,0,-1};public:int swimInWater(vector<vector<int>>& grid) {int n grid.size();auto check [&](int mid) -> bool{queue<pair<int,int>>…...
Nacos-2.4.0最新版本docker镜像,本人亲自制作,部署十分方便,兼容postgresql最新版本17和16,奉献给大家了
基于Postgresql数据库存储的nacos最新版本2.4.0,采用docker镜像安装方式 因业务需要,为了让nacos支持postgresql,特意花了两天时间修改了源码,然后制作了docker镜像,如果你也在找支持postgresql的nacos最新版本,恭喜你,你来的正好~ nacos-2.4.0 postgresql的数据库脚本…...
Halcon机器视觉15种缺陷检测案例_9找出所有网格顶点的位置
Halcon机器视觉15种缺陷检测案例_9找出所有网格顶点的位置 效果 原图 代码 *9找出所有网格顶点的位置 dev_update_off ()read_image (Image, 9找出所有风格顶点的位置) get_image_size (Image, Width, Height) *关闭已打开的窗口 dev_close_window ()dev_open_window (0, 0, …...
w30-python02-pytest入门
代码如下: import pytest class Test_Obj:"""测试类"""#用例级别前后置def setup(self):print(用例级别------的前置处理)def teardown(self):print("用例级别--------的后置处理")# 用例def test_case1(self):print(&quo…...
WPF+Mvvm项目入门完整教程-仓储管理系统(二)
目录 一、搭建一个主界面框架二、实现步骤1.主界面区域划分2.主界面区域实现 一、搭建一个主界面框架 主要实现主界面的框架样式和基础功能。这里特别说明一下,由于MvvmLight 已经过时不在维护,本项目决定将MvvmLight框架变更为 CommunityToolkit.Mvvm …...
SkyWalking入门搭建【apache-skywalking-apm-10.0.0】
Java学习文档 视频讲解 文章目录 一、准备二、服务启动2-1、Nacos启动2-2、SkyWalking服务端启动2-3、SkyWalking控制台启动2-4、自定义服务接入 SkyWalking 三、常用监控3-1、服务请求通过率3-2、服务请求拓扑图3-3、链路 四、日志配置五、性能剖析六、数据持久化6-1、MySQL持…...
IPFS去中心化存储实战指南:黑马程序员音乐播放器项目开发完整教程
IPFS去中心化存储实战指南:黑马程序员音乐播放器项目开发完整教程 【免费下载链接】BlockChain 黑马程序员 120天全栈区块链开发 开源教程 项目地址: https://gitcode.com/gh_mirrors/blockchain95/BlockChain 你是否想过如何构建一个真正去中心化的音乐播放…...
别再乱算相似度了!用Python实战二元变量聚类:从Jaccard系数到病人分组
医疗数据分析实战:用Python实现基于Jaccard系数的病人症状聚类在医疗数据分析领域,如何从海量病人症状数据中发现潜在规律一直是临床研究的难点。传统方法往往依赖医生经验或简单统计,而现代数据挖掘技术为我们提供了更科学的解决方案。本文将…...
UOS系统下WPS卸载不干净?手把手教你用命令行精准清理(附dpkg/apt组合拳)
UOS系统下WPS卸载不干净?手把手教你用命令行精准清理 在UOS系统日常使用中,WPS Office作为常用办公软件,有时因版本更新或功能调整需要彻底卸载。但不少用户发现,通过图形界面或简单命令卸载后,系统中仍残留配置文件、…...
双稳健机器学习:用正交性与交叉拟合解决因果推断中的ML偏差
1. 项目概述:当机器学习遇见因果推断的“干扰”难题在实证研究的日常工作中,我们常常面临一个核心矛盾:我们真正关心的,往往只是一个或几个关键参数——比如一项政策对就业率的平均影响(平均处理效应,ATE&a…...
UE4SS终极指南:从零开始掌握虚幻引擎脚本系统
UE4SS终极指南:从零开始掌握虚幻引擎脚本系统 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS UE4S…...
【2026实测】怎么提高论文原创度?盘点8款主流降AI工具,附结构级优化指南
写文章最怕碰到什么,是辛辛苦苦自己码出来的字,却被标了极高的AI值。目前很多文本审核机制对内容的原创度要求极高,纯手写的初稿也可能因为句式太工整被判定为机器生成的。 为了帮几个快被这事折腾疯了的学弟学妹找条出路,我花了…...
保姆级教程:手把手教你搞定ESXi 6.7安装前的BIOS设置(VT-x/VT-d/AES全开)
从零开始:ESXi 6.7安装前的BIOS设置终极指南当你第一次接触企业级虚拟化平台时,那种既兴奋又忐忑的心情我完全理解。作为过来人,我记得自己第一次在Dell PowerEdge服务器上安装ESXi时,光是搞清楚BIOS里那些晦涩的选项就花了整整一…...
基于Arduino UNO的真随机数生成与数据持久化在Tambola游戏机中的应用
1. 项目概述:用Arduino UNO打造一台全自动Tambola游戏机如果你玩过或者听说过Tambola(在印度非常流行的游戏,在欧美也叫Bingo或Housie),就知道它的核心玩法是主持人从一个装有数字球的容器中随机抽取号码,玩…...
具身智能的发展对人类社会的影响有哪些?
具身智能对人类社会影响一、经济产业层面产业重构:催生机器人、智能制造、自动驾驶新产业,重塑生产链条效率跃升:替代重复繁重劳作,工厂、农业、物流产能大幅提升就业结构变化:低端体力岗位缩减,运维、研发…...
忆阻储层计算:预处理优化与硬件实现
1. 项目概述在当今人工智能快速发展的时代,神经形态计算正成为突破传统冯诺依曼架构瓶颈的重要方向。储层计算(Reservoir Computing,RC)作为一种特殊的循环神经网络架构,因其仅需训练输出层而显著降低了计算开销&#…...
