力扣L14--- 415.字符串相加(JAVA版)-2024年3月17日

1.题目
在这里插入图片描述

2.知识点
注1:你可以使用Integer.parseInt()或Double.parseDouble()等方法将字符串转换为整数或浮点数。

public class Main {
    public static void main(String[] args) {
        String str = "123";
        int num = Integer.parseInt(str);
        System.out.println("转换后的整数:" + num);

        String strDouble = "3.14";
        double doubleNum = Double.parseDouble(strDouble);
        System.out.println("转换后的浮点数:" + doubleNum);
    }
}
//运行结果
//转换后的整数:123
//转换后的浮点数:3.14

**注2:**在Java中,toString()方法用于将对象转换为字符串。然而,int是一个原始数据类型,而不是对象,因此它没有toString()方法。可以直接使用String.valueOf()方法将int转换为字符串。修改你的代码如下:
String.valueOf() 是一个静态方法,它接受各种类型的参数,并返回一个表示该参数的字符串。如果参数为一个对象,则调用该对象的toString()方法;如果参数为原始数据类型,则将其转换为相应的字符串表示。

int num = 123;
String str1 = String.valueOf(num); // 将整数转换为字符串

double pi = 3.14;
String str2 = String.valueOf(pi); // 将浮点数转换为字符串

boolean bool = true;
String str3 = String.valueOf(bool); // 将布尔值转换为字符串

char ch = 'A';
String str4 = String.valueOf(ch); // 将字符转换为字符串

Object obj = new Object();
String str5 = String.valueOf(obj); // 将对象转换为字符串,实际上会调用对象的 toString() 方法

注3:- ‘0’ 的作用是将字符转换为对应的数字。

在ASCII编码中,数字字符 ‘0’ 到 ‘9’ 的ASCII值是连续的,分别是 48 到 57。因此,将一个数字字符减去 ‘0’ 的ASCII值,就可以得到对应的数字。

例如:
‘0’ - ‘0’ 的结果是 0
‘1’ - ‘0’ 的结果是 1
‘2’ - ‘0’ 的结果是 2

‘9’ - ‘0’ 的结果是 9

注4:result.reverse() 是 StringBuilder 类中的方法,它用于反转 StringBuilder 对象中的字符序列。调用这个方法会将 StringBuilder 对象中的字符顺序颠倒过来。
结果是 “123”,反转后就变成了 “321”

**注5:**StringBuilder 是 Java 中的一个类,用于构建可变的字符串。与 String 类不同,StringBuilder 允许你修改字符串的内容,例如添加、删除或替换字符。这对于需要频繁修改字符串的情况非常有用,因为它避免了创建许多不必要的中间字符串,提高了性能。

以下是 StringBuilder 类的一些常用方法:

append(str):将指定的字符串添加到当前 StringBuilder 的末尾。
insert(index, str):在指定位置插入指定的字符串。
delete(start, end):删除指定范围内的字符。
deleteCharAt(index):删除指定位置的字符。
replace(start, end, str):用指定的字符串替换指定范围内的字符。
reverse():将当前 StringBuilder 中的字符序列反转。

3.思路与例子
(1)第一次思路如下,但是会抛出大整数异常,它表示当尝试将一个字符串转换为数字,但是该字符串不符合数字格式时所抛出的异常。

class Solution {
public String addStrings(String num1, String num2) {
int num11=Integer.parseInt(num1);
int num22=Integer.parseInt(num2);
int sum=0;
sum=num11+num22;
return String.valueOf(sum);

}

}
(2)

假设我们要计算以下两个数字的相加:num1 = "123" 和 num2 = "456"。

初始化: 我们从末尾开始逐位相加,并考虑进位。初始时,carry(进位)为0。

个位相加: 我们先从个位开始相加:

digit1 = 3(num1 的个位)
digit2 = 6(num2 的个位)
sum = digit1 + digit2 + carry = 3 + 6 + 0 = 9
result.append(sum % 10):将当前位的个位数(9 mod 10 = 9)添加到结果中,即 result = "9"
carry = sum / 10 = 9 / 10 = 0
十位相加: 然后我们移动到十位:

digit1 = 2(num1 的十位)
digit2 = 5(num2 的十位)
sum = digit1 + digit2 + carry = 2 + 5 + 0 = 7
result.append(sum % 10):将当前位的个位数(7 mod 10 = 7)添加到结果中,即 result = "97"
carry = sum / 10 = 7 / 10 = 0
百位相加: 最后,移动到百位:

digit1 = 1(num1 的百位)
digit2 = 4(num2 的百位)
sum = digit1 + digit2 + carry = 1 + 4 + 0 = 5
result.append(sum % 10):将当前位的个位数(5 mod 10 = 5)添加到结果中,即 result = "579"
carry = sum / 10 = 5 / 10 = 0
在每次迭代中,sum 是两个数字当前位的和,而 carry 是由前一位相加产生的进位。这样,我们可以确保正确处理进位,并得到正确的最终结果。

(3)

假设我们要计算以下两个数字的相加:num1 = "999" 和 num2 = "1"。

初始化: 我们从末尾开始逐位相加,并考虑进位。初始时,carry(进位)为0。

个位相加: 我们先从个位开始相加:

digit1 = 9(num1 的个位)
digit2 = 1(num2 的个位)
sum = digit1 + digit2 + carry = 9 + 1 + 0 = 10
result.append(sum % 10):将当前位的个位数(10 mod 10 = 0)添加到结果中,即 result = "0"
carry = sum / 10 = 10 / 10 = 1
十位相加: 然后我们移动到十位:

digit1 = 9(num1 的十位)
digit2 = 0(num2 的十位,因为已经遍历完了)
sum = digit1 + digit2 + carry = 9 + 0 + 1 = 10
result.append(sum % 10):将当前位的个位数(10 mod 10 = 0)添加到结果中,即 result = "00"
carry = sum / 10 = 10 / 10 = 1
百位相加: 最后,移动到百位:

digit1 = 9(num1 的百位)
digit2 = 0(num2 的百位,因为已经遍历完了)
sum = digit1 + digit2 + carry = 9 + 0 + 1 = 10
result.append(sum % 10):将当前位的个位数(10 mod 10 = 0)添加到结果中,即 result = "000"
carry = sum / 10 = 10 / 10 = 1
最终的结果是 "1000",即 "999 + 1 = 1000"。在每次迭代中,sum 是两个数字当前位的和,而 carry 是由前一位相加产生的进位。通过正确处理进位,我们得到了正确的最终结果。
在我们执行完第一次循环后,结果确实是 "000",而进位 carry 是 1。这意味着我们已经完成了一次相加,并且有了进位,但我们的循环还没有结束。我们需要继续循环,以确保我们处理了所有的位,并且正确处理了进位。

在下一次循环中,我们会发现所有的位都已经被遍历完了(因为 i 和 j 都小于 0 了),但进位 carry 仍然是 1。这表示我们需要在结果的最高位处添加一个额外的 1,来表示最终的进位。

所以,最终的输出应该是 "1000"。虽然结果字符串中的大部分位都是 0,但我们仍然需要将进位 1 添加到结果中,以得到正确的最终结果。

4.代码实现

class Solution {
    public String addStrings(String num1, String num2) {
        //因为不能调用大整数库(Biginteger),也不能将输入的字符串转成整数形式,所以我们直接用竖位相加的方法
      StringBuilder sb=new StringBuilder();//存计算结果
       int i=num1.length()-1;
       int j=num2.length()-1;
       int jinwei=0;//进位
       int digit1,digit2;

       while(i>=0||j>=0||jinwei!=0)
       {
       if(i>=0)
       {
        digit1=num1.charAt(i--)-'0';
        //-0  代表将字符转换成ASCII码 变成数字

       }
       else
       {
        digit1=0;//当i<0的时候,直接将该位置为0

       }
       if(j>=0)
       {
        digit2=num2.charAt(j--)-'0';
       }
       else{
        digit2=0;
       }
       
       
     int sum;
     sum=digit1+digit2+jinwei;
     sb.append(sum%10);//每次相加 从右往左  取余数  ;将当前位的个位数添加到结果中
     jinwei=sum/10;// // 更新进位,即取当前位的十位数


    }
    return sb.reverse().toString();
   
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/465564.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度序列模型与自然语言处理:基于TensorFlow2实践

目录 写在前面 推荐图书 编辑推荐 内容简介 作者简介 推荐理由 写在最后 写在前面 本期博主给大家推荐一本深度学习的好书&#xff0c;对Python深度学习感兴趣的小伙伴快来看看吧&#xff01; 推荐图书 《深度序列模型与自然语言处理 基于TensorFlow2实践》 直达链接…

iOS常见崩溃简介

1. 崩溃 多指在移动设备&#xff08;如iOS、Android设备&#xff09;中或不可移动设备&#xff08;如:Windows、Linux等设备&#xff09;&#xff0c; 在打开或使用应用程序时出现的突然退出中断的情况&#xff08;类似于Windows的应用程序崩溃&#xff09;。 多表现为&#…

MySQL_数据库图形化界面软件_00000_00001

目录 NavicatSQLyogDBeaverMySQL Workbench可能出现的问题 Navicat 官网地址&#xff1a; 英文&#xff1a;https://www.navicat.com 中文&#xff1a;https://www.navicat.com.cn SQLyog 官网地址&#xff1a; 英文&#xff1a;https://webyog.com DBeaver 官网地址&…

使用 opencv 识别答题卡,生成填涂答案

一般答题卡设计时都在试卷4个角预留4个一样大小的黑块 仅能识别选择题判断题之类的填涂答题的题目&#xff0c;不能识别填空题应用题等其它主观题 使用 opencv 识别试卷图片中所有黑块&#xff0c;再根据黑块大小获取四个角的位置&#xff0c;根据四个黑块位置校正图像 将图…

【Numpy】练习题100道(51-75题)

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; #学习笔记# Git-hub链接 目录 1.题目列表 2.题解 1.题目列表 51. 创建一个表示位置&#xff08;x,y&#xff09;和颜色&#xff08;r,g,b&#xff09;的结…

chatGLM3+chatchat实现本地知识库

背景 由于客服存在大量的问题为FAQ问题&#xff0c;需要精准回复客户&#xff0c;所以针对此类精准问题&#xff0c;通过自建同量数量库进行回复。 落地方案 通过chatGLM3-6Blangchain-chatchatbge-large-zh实现本地知识库库。 注意&#xff1a;相关介绍和说明请看官网~ 配置要…

【解读】NIST网络安全框架CSF 2.0

2014年&#xff0c;NIST&#xff08;美国国家标准与技术研究所&#xff0c;类似于中国的工信部&#xff09;首次发布了网络安全框架CSF&#xff08;Cybersecurity Framework)&#xff0c;十年后&#xff0c;在2024年2月26日发布了重大更新&#xff08;CSF 2.0&#xff09;&…

C++初阶:string的使用与STL

目录 1. C标准库与STL2. string是什么3. string的使用3.1 构造与拷贝构造3.2 遍历访问方式3.3 STL中算法操作相关内容3.4 容量相关成员函数3.5 内容修改相关成员函数3.6 string类操作成员函数3.7 string的非成员函数 1. C标准库与STL 编程语言标准库中&#xff0c;有着许多基础…

wps技巧二实现每一行文字后面统一添加数据

效果 操作 查找&#xff0c;输入^p 替换&#xff0c;输入 n m p q^p&#xff0c;测试数据&#xff0c;随意替换成你想要的 结果

MySQL-- B+ 树

一、InnoDB 是如何存储数据的&#xff1f; InnoDB 的数据是按「数据页」为单位来读写的 数据库的 I/O 操作的最小单位是页&#xff0c;InnoDB 数据页的默认大小是 16KB 单个数据页的结构及作用 多个数据页之间的逻辑连接&#xff08;双向链表&#xff09;&#xff0c;不需要物…

STM32/GD32——FreeRTOS任务管理与相关机制

芯片选型 Ciga Device — GD32F470系列 任务管理 任务处理API 操作 API 动态任务创建 xTaskCreate 任务删除 vTaskDelete 静态任务创建 vTaskCreateStatic 挂起任务 vTaskSuspend 恢复任务 vTaskResume 任务创建 BaseType_t xTaskCreate( TaskFunction_t pxTa…

vulhub中GIT-SHELL 沙盒绕过漏洞复现(CVE-2017-8386)

GIT-SHELL 沙盒绕过&#xff08;CVE-2017-8386&#xff09;导致任意文件读取、可能的任意命令执行漏洞。 测试环境 为了不和docker母机的ssh端口冲突&#xff0c;将容器的ssh端口设置成3322。本目录下我生成了一个id_rsa&#xff0c;这是ssh的私钥&#xff0c;连接的时候请指…

固态硬盘有缓存和没缓存有什么区别

固态硬盘&#xff08;SSD&#xff09;已经成为现代计算机的重要组成部分&#xff0c;它们提供了比传统机械硬盘更快的读写速度&#xff0c;从而显著提升了操作系统的运行速度和应用程序的加载效率。 其中&#xff0c;缓存&#xff08;Cache&#xff09;是固态硬盘中一个重要的…

【SpringCloud】使用Seata实现分布式事务

目录 一、Seata 框架的需求背景二、Seata 事务模式与架构2.1 Seata 组成2.2 Seata 事务模式 三、Seata 实战演示3.1 部署 Seata Server3.1.1 下载 Seata Server3.1.2 更改 Seata Server 配置3.1.3 创建 Seata Server 所需的数据库、数据库表3.1.4 启动 Seata Server 3.2 Seata …

ROS2从入门到精通1-1:详解ROS2话题通信机制与自定义消息

目录 0 专栏介绍1 话题通信模型2 话题模型实现(C)3 话题模型实现(Python)4 自定义消息 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 &#x1f680;详情&a…

【最新版源码】快递平台独立版小程序源码|带cps推广营销流量主+前端

源码介绍&#xff1a; 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c;德邦等&#xff0c;功能成熟 如何收益: 1.对接第三方平台成本大约4…

CoAP计算机协议,应用于物联网

什么是CoAP协议&#xff1f; CoAP&#xff08;Constrained Application Protocol&#xff0c;受限应用协议&#xff09;是一种专为物联网&#xff08;IoT&#xff09;设备和资源受限网络设计的应用层协议。它的诞生也是由于物联网设备大多都是资源限制型的&#xff0c;比如 CP…

【GPT-SOVITS-02】GPT模块解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

Java之SpringBoot基础夯实——八股文【2024面试题案例代码】

1、什么是 Spring Boot&#xff1f; Spring Boot 是一个开源的Java开发框架&#xff0c;由Pivotal团队开发&#xff0c;其核心目标是简化新Spring应用的初始搭建和开发流程。它以Spring框架为基础&#xff0c;通过自动配置和约定优于配置的原则&#xff0c;极大程度地减少了手…

HarmonyOS(鸿蒙)ArkUI组件

方舟开发框架&#xff08;简称ArkUI&#xff09;为HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界面…
最新文章