【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持…...

exo项目目录架构
目录 .yml 文件是 YAML(YAML Aint Markup Language) exo项目目录架构 文件作用 topology、viz:项目拓扑结构可视化相关的代码或工具。 项目目录架构 文件作用 .yml 文件是 YAML(YAML Aint Markup Language) 文件的扩展名,YAML 是一种人类可读的数据序列化标准,通…...

mysql中where与on区别
WHERE子句 作用范围:WHERE子句主要用于过滤FROM子句返回的结果集。它可以在SELECT、UPDATE、DELETE语句中使用,以限制哪些行被包含在最终的查询结果中,或者哪些行被更新或删除。应用场景:当需要基于某些条件过滤结果集时…...

filebeat把日志文件上传到Es中配置(ES7版本)
默认的filebeat配置会把所有的索引都放到一个文件中,通过摸索发现可以自定义索引的名字、模板、生命周期 (重点注意)该配置文件只适应于ES版本是7,不适应于8的版本,两个版本的配置文件差异很大 /app/logs/info.log日…...

Vue Router基础
Router 的作用是在单页应用(SPA)中将浏览器的URL和用户看到的内容绑定起来。当用户在浏览不同页面时,URL会随之更新,但页面不需要从服务器重新加载。 1 Router 基础 RouterView RouterView 用于渲染当前URL路径对应的路由组件。…...

Apache压测工具ab(Apache Bench)工具的下载安装和使用示例
场景 Jmeter进行http接口压力测试: Jmeter进行http接口压力测试_接口压测两万量-CSDN博客 上面讲压测工具Jmeter的使用,下面介绍另外一个ab(Apache Bench)压测工具的使用。 apache bench apache bench是apache自带的压力测试工具。 ab不仅可以对ap…...

IPIDEA与Python爬虫:联手解锁全球电商数据宝库
IPIDEA与Python爬虫:联手解锁全球电商数据宝库 如何运用代理IP在电商领域进行高效数据采集。特别是在遭遇访问限制的情况下,如何优雅地绕过那些恼人的访问管理机制。当然,在我们的探险之旅中,开源神器PlugLink也将适时出场&#…...

Fine-BI学习笔记
官方学习文档:快速入门指南- FineBI帮助文档 FineBI帮助文档 (fanruan.com) 1.零基础入门 1.1 功能简介 完成四个流程:新建分析主题、添加数据、分析数据、分享协作。 示例数据获取:5分钟上手FineBI - FineBI帮助文档 (fanruan.com) 1.2 …...

AI 辅助编程 Coding AI 辅助研发组织的技术蓝图
简简单单 Online zuozuo:欢迎商业合作 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo :联系我们:VX :tja6288 / EMAIL: 347969164@qq.com 文章目录 AI 辅助编程 Coding A…...

VScode 批量操作
VScode 批量操作 批量修改 按住 alt/option 键, 选择需要批量操作的位置 如果是多行,则按住 altshift 键 可以直接操作 但是有时候比如变量命名,可能需要递增操作的命名 需要下载插件 Increment Selection 按照1的方法多选光标之后&am…...

【Linux】管道通信和 system V 通信
文章目录 一、进程通信原理(让不同进程看到同一份资源)二、管道通信2.1 管道原理及其特点2.1 匿名管道和命名管道 三、共享内存通信3.1 共享内存原理3.2 创建和关联共享内存3.3 去关联、ipc 指令和删除共享内存 四、消息队列和信号量(了解&am…...