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

news2025/1/13 7:47:44

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.coloradmin.cn/o/1523975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Mac中删除照片?这里有详细步骤

前言 本文介绍如何从Mac中删除照片,以释放硬盘空间或更好地组织文件和文件夹。 如何使用废纸篓删除Mac上的图片 在Mac上删除图片的最简单方法之一是使用废纸篓功能。学习只需几秒钟。下面是如何删除单个图片以及如何在Mac上删除多个图片,以及一些关键和有用的提示,以使该…

2023全球国际专利申请数量公布:华为遥遥领先三星、高通、苹果~

华为、三星和高通在2023年的国际专利申请数量上位居前三甲&#xff0c;其中来自中国的公司大幅度超越韩国和美国的高科技竞争对手。世界知识产权组织&#xff08;WIPO&#xff09;最新发布的数据显示&#xff0c;即使面临美国严厉制裁严重影响其在全球市场的运作能力&#xff0…

HTML静态网页成品作业(HTML+CSS)——家乡广州介绍设计制作(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

AI泳池溺水识别摄像机

AI泳池溺水识别摄像机是一种利用人工智能技术来监测和识别游泳池中溺水行为的智能监控设备。通过深度学习算法和图像识别技术&#xff0c;该摄像机能够实时捕捉游泳池的画面&#xff0c;自动分析水面动态和人员行为&#xff0c;判断是否有溺水事件发生&#xff0c;并及时发出警…

浅谈虚拟机下部分内网穿透功能实现方法

新钛云服已累计为您分享789篇技术干货 最近个人搭建服务器的情况有所增长&#xff0c;简单介绍一下一些可以使得服务器能被公网ip访问的方法。内网穿透一般用于将位于内部私有网络&#xff08;如家庭网络&#xff09;的服务暴露到公共网络&#xff08;如互联网&#xff09;上&a…

Java解决完全二叉树的节点个数

Java解决完全二叉树的节点个数 01 题目 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的…

java集合框架——Map集合概述

前言&#xff1a; 之前接触了单列合集&#xff0c;现在又接触了双列合集。整理下心得&#xff0c;打好基础&#xff0c;daydayup&#xff01;&#xff01; Map集合 Map集合称为双列集合&#xff0c;也被称为“键值对集合”。格式&#xff1a;{key1value1,key2value2...}&#…

4-如何进行细分市场分析- 04 案例分析 健身房行业投资项目

现在运用前面学过的如何进行细分市场分析的1、2 、3 &#xff0c;以健身房行业投资项目为例来进行细分市场的分析&#xff1a;首先是画行业的产业链&#xff0c;如下图&#xff0c;注意其中的关键节点&#xff0c; 接着对市场竞争者进行进行细分和特征分析&#xff0c;确定主要…

docker引擎

目录 一、Docker引擎发展历程 二、docker引擎架构 三、docker引擎分类 四、docker引擎安装 4.1安装条件 4.2 使用rpm存储库安装 4.2.1设置存储库 4.2.2安装docker引擎 4.2.3启动docker,并设置docker开机自启动 五、卸载docker引擎 5.1.卸载 Docker 引擎、CLI、conta…

python二级备考(2)-简单应用题

第1套 使用turtle库的turtle. right()函数和turtle.fd()函数绘制一个菱形&#xff0c;边长为200像素&#xff0c;4个内角度数为2个60度和2个120度 键盘输入一组人员的姓名、性别、年龄等信息&#xff0c;信息间采用空格分隔&#xff0c;每人一行&#xff0c;空行回车结束录入&a…

无人机机载频谱监测方案助力空中频谱监测与干扰排查

作者介绍 一、方案背景 频谱资源是通信最重要的资产之一&#xff0c;随着宽带无线业务的快速增长&#xff0c;对频率资源的需求大幅增加。未来频率资源的供需矛盾将非常突出&#xff0c;空中频谱环境也会越来越复杂&#xff0c;对于工程师来说&#xff0c;在复杂的电磁环境条件…

Unload-labs-pass-03

这里是设置了黑名单不能传.asp.aspx.php.jsp文件 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(.asp,.aspx,.php,.jsp);$file_name trim($_FILES[upload_file][name]);$file_name deldot($file_name);//删…

GPT-4.5 Turbo详细信息被搜索引擎泄露:有重大改进

3月14日消息&#xff0c;据外电报道&#xff0c;OpenAI 最新人工智能模型 GPT-4.5 Turbo 的详细信息已通过 Bing 和 DuckDuckGo 的搜索引擎索引过早泄露。 GPT-4.5 Turbo 的产品页面在正式发布之前就出现在搜索结果中&#xff0c;引发了人们对 OpenAI 最新型号的特性和功能的猜…

0基础 三个月掌握C语言(11)

字符函数和字符串函数 为了方便操作字符和字符串 C语言标准库中提供了一系列库函数 接下来我们学习一下这些函数 字符分类函数 C语言提供了一系列用于字符分类的函数&#xff0c;这些函数定义在ctype.h头文件中。这些函数通常用于检查字符是否属于特定的类别&#xff0c;例如…

怎么在空闲时间用网络赚钱且收入不低于50?

何其有幸&#xff0c;我们生活在一个网络时代&#xff0c;买东西&#xff0c;生活缴费都可以通过网络来完成&#xff0c;给大家省下了大量的时间和精力&#xff0c;让生活更加便利。不仅如此&#xff0c;还可以通过网络来娱乐、交流&#xff0c;更可以通过它来赚钱。很多朋友上…

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

[java基础揉碎]断点调试

一个实际需求: 1.在开发中&#xff0c;新手程序员在查找错误时&#xff0c;这时老程序员就会温馨提示&#xff0c;可以用断点调试&#xff0c; 一步一步的看源码执行的过程&#xff0c;从而发现错误所在。 2.重要提示:在断点调试过程中&#xff0c;是运行状态&#xff0c;是以…

【NBUOJ刷题笔记】递推_递归+分治策略2

0. 前言 PS&#xff1a;本人并不是集训队的成员&#xff0c;因此代码写的烂轻点喷。。。本专题一方面是巩固自己的算法知识&#xff0c;另一方面是给NBU学弟学妹们参考解题思路&#xff08;切勿直接搬运抄袭提交作业&#xff01;&#xff01;&#xff01;&#xff09;最后&…

【Web开发】CSS教学(超详细,满满的干货)

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Web开发】CSS教学(超详细,满满的干货) &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 CSS一. 什么是CSS?1.1 基本语法规范1.2 引入方式1.3 规范 二. CSS选…

JavaScript练手小技巧:数字反转时钟

样式基于博主的这篇文章&#xff1a; CSS3技巧38&#xff1a;3D 翻转数字效果-CSDN博客 既然可以实现翻转数字了&#xff0c;肯定就可以跟 JS 相结合去完成一些数字展示效果。 比如&#xff0c;数字反转时钟。 为了方便&#xff0c;所有 HTML 数字根据时间动态生成。因此&a…