两个用字符串表示的大数字的和

news2024/11/26 10:18:30

文章目录

  • 题目详情
  • Java实现
    • 分析
    • Java 怎么获取到字符串中的对应位置的数字值
    • Java完整代码
    • 测试验证
  • python实现
    • python 怎么获取到字符串中的对应位置的数字值
    • python完整代码
  • 总结

这是遇到的一道快手数仓岗位的面试题目,题目大意如下:

题目详情

现在有两个用字符串表示的数字,例如num1=“9999933332232”,num2=“999999425262”,问题是请你对两个数字求和,即求num1+num2

Java实现

分析

这里给出我的一种思路,如果有不一样的方法,请指教一下,不胜感激。
1、新建一个StringBuilder,存储计算后返回的数字结果
2、从尾到头遍历两个字符串的数字,相加计算进位和当前位置的值
3、上面计算完之后,判断进位是否为1,是则将给StringBuilder对象再append1,否则不做操作

Java 怎么获取到字符串中的对应位置的数字值

本题涉及的一个转换字符值到对应数字值,可能是一个难点。
在java中我们通过num1.charAt(length1)可以获得对应位置字符的ascII码值,但是我们需要的是数字值,才能用于计算,其实也很简单,但是不知道的时候就有点麻烦。

使用字符ascII码值的运算:num1.charAt(length1) - ‘0’ 返回对应位置的数字值,解决问题了。

Java完整代码

代码中有详细的注释,实现过程主要是入上述分析。

public static String BigDataAdd(String num1, String num2) {
        int length1 = num1.length() - 1;  // 方便下面索引取值,因此减1
        int length2 = num2.length() - 1;
        int carry = 0;
        StringBuilder sb = new StringBuilder();

        while (length1 >= 0 || length2 >= 0) {

            int a = (length1 >= 0)? num1.charAt(length1) - '0' : 0;  // 将asc码值计算转成数字值
            int b = (length2 >= 0)? num2.charAt(length2) - '0' : 0;

            int sum = a + b + carry;
            carry = sum / 10;  // 进位
            sb.append(sum % 10);
            length1--;
            length2--;
        }

        if (carry == 1) {  // 有进位
            sb.append(1);
        }

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

测试验证

public static void main(String[] args) {
        System.out.println(BigDataAdd("9999933332232", "999999425262"));
    }

在这里插入图片描述

public static void main(String[] args) {
        System.out.println(BigDataAdd("9999933332232", "425262"));
    }

在这里插入图片描述

python实现

python 怎么获取到字符串中的对应位置的数字值

在python中获取对应位置的值更加容易。python中的字符串可以看做一个字符数组,直接能取值,然后再强转成int类型就可以嘞
int(num1[l1]) 即可获取到指定位置的数字值,是不是更加简单,python的完整实现,见下面代码

python完整代码

def bigDataAdd(num1, num2):
    l1 = len(num1) - 1
    l2 = len(num2) - 1
    carry = 0
    sb = []

    while l1 >= 0 or l2 >= 0:
        a = int(num1[l1])
        b = int(num2[l2])
        sum = a + b + carry
        carry = sum // 10
        sb.append(sum % 10)
        l1 -= 1
        l2 -= 1

    if carry == 1:
        sb.append(1)

    sb.reverse()

    result = ""
    for i in sb:
        result += str(i)
    return result

总结

这应该也是一道比较简单的面试题,我当时没有处理好的就是怎么获取到字符串中的数字值,就放在这里记录一下吧。顺便如果有不一样的方法,也希望能交流一下,不胜感激。

ps:计划每日更新一篇博客,今日2023-05-18,日更第三十二天。
昨日更新:

leetcode 不同路径详解

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

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

相关文章

【树莓派4B安装18.04桌面+远程SSH】

【树莓派4B安装18.04桌面远程SSH】 1. 前言2 .树莓派安装ubuntu18.04 系统2.1 下载ubuntu Server 18.04 的镜像包2.2 镜像烧录2.3 高级设置2.4 配置WiFi2.5 ssh文件配置2.6 Pi 4B启动文件 3. 安装finalshell3.1 windows版下载3.2 windows版安装3.3 SSH连接 4. 安装ubuntu桌面4.…

【野火启明_瑞萨RA6M5】梦的开始 ---- 点灯(寄存器)

文章目录 一、IOPORT简介二、IOPORT的框图分析三、IOPORT的寄存器描述1. 端口引脚功能选择寄存器2. 端口输出数据寄存器3. 端口输入数据寄存器4. 端口输出置位/复位寄存器5. 写保护寄存器 四、点亮LED灯(寄存器) 从本文开始,我将以瑞萨RA系列…

【夜莺(Flashcat)V6监控】3.链路追踪

链路追踪 介绍 链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机…

Java 把一个 List 转换为字符串

在本快速指南中,我们将会解释如何在 Java 把一个 List 转换为 String 字符串。 这个在某些特定的场合可能比较有用,比如说在控制台中输出 List 中的内容,转换为可以人为阅读的内容来进行调试。 使用 List 中标准的 toString() 方法 一个最简…

(2)数码管

LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成"8"字器件 51单片机是共阴极连接 74HC245这个芯片有什么作用呢?解:这个芯片被称之为双向数据缓冲器这个芯片的作用,用来进行数据缓冲(提高驱…

【网络编程】详解UDP/TCP套接字的创建流程

目录 一、网络编程套接字 1、一些概念 1.1源IP地址和目的IP地址 1.2端口号port 1.3TCP和UDP的性质 1.4网络字节序、IP地址类型转换、数据接收与发送函数、popen函数 2、UDP套接字 2.1UDP服务器创建流程 2.2UDP客户端创建流程 2.3创建socket套接字 2.4绑定套接字对应…

快速找出PATH 路径下重复的命令程序文件

RT,就是想找出命名冲突的可执行文件。日积月累的,PATH 环境变量里乱七八糟堆了一堆东西,很可能想叫一个命令出来,结果实际执行的是另一个地方的程序。 Python 脚本 import ospath os.environ[PATH] folders path.split(;) fil…

理解HttpSession

什么是session 在我刚刚从事后端开发的时候,有一个问题困扰了我很久。 就有个玩意叫session。 PostMapping("login")public Result login(RequestParam("id") String id,RequestParam("password") String password, HttpSession se…

哈希及模拟实现

文章目录 哈希1. 哈希相关概念1.1 哈希概念1.2 哈希冲突1.3 哈希函数1.4 哈希冲突解决1.4.1 闭散列/开放定址法(1)线性探测(2) 二次探测 1.4.2 开散列/哈希桶 2. 开放定址法的实现2.1 结构2.2 插入Insert2.2.1 传统写法2.2.2 现代写法 2.3 查找Find2.4 删除Erase2.5 整体代码 3…

springcloud基于web的智慧养老平台

系统分析 可行性分析 在开发系统之前要进行系统可行性分析,目的是在用最简单的方法去解决最大的问题,程序一旦开发出来满足了用户的需要,所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。 1、技术可行…

一图看懂 dateutil 模块:Python datetime 模块的扩展,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 dateutil 模块:Python datetime 模块的扩展,资料整理笔记(大全) 🧊摘要🧊模块图🧊类关系…

005、数据库结构

数据库结构 1、数据库集簇逻辑结构2、对象标识符3、数据库集簇物理结构4、其它目录结构表空间物理文件位置1、数据库集簇逻辑结构 • 数据库集簇逻辑结构 数据库 : 把数据逻辑分开存放。 对象是放在数据库当中。表空间: 把数据从逻辑或者物理上分割存放2、对象标识符 Postg…

Weblogic SSRF 漏洞(CVE-2014-4210)

SSRF漏洞 ​ SSRF(服务端请求伪造),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。 ​ 简单的说就是利用一个可…

《统计学习方法》——隐马尔可夫模型(下)

学习算法 HMM的学习,在有观测序列的情况下,根据训练数据是否包含状态序列,可以分别由监督学习算法和无监督学习算法实现。 监督学习算法 监督学习算法就比较简单,基于已有的数据利用极大似然估计法来估计隐马尔可夫模型的参数。…

详解二叉树

🌈目录 一、树形结构​ 🌳1.1 概念1.2 其他概念1.3 树的表示形式 二、二叉树✨2.1 概念2.2 两种特殊二叉树2.3 性质2.4 二叉树存储 三、二叉树的基本操作🙌3.1 前置说明3.2 二叉树的遍历3.3 二叉树的基本操作 四、二叉树的OJ✍️ 一、树形结构…

springboot+vue医院信管系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的医院信管系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…

Service Control Manager 服务管理器简介

在windows驱动开发流程中,写完sys驱动binary之后,为了让OS能够正确的从注册表中读取到对应的信息,并且将其load运行起来,还需要编写inf文件来描述配置驱动文件。不过这也不是必须的,可以通过ServiceControlManager直接…

Fiddler 抓包工具 - 全网最全最细教程,没有之一

Fiddler 简介 Fiddler 是位于客户端和服务器端的 HTTP 代理 目前最常用的 http 抓包工具之一 功能非常强大,是 Web 调试的利器 监控浏览器所有的 HTTP/HTTPS 流量 查看、分析请求内容细节 伪造客户端请求和服务器响应 测试网站的性能解密 HTTPS 的 Web 会话 全局…

Go语音基于zap的日志封装

zap日志封装 Zap是一个高性能、结构化日志库,专为Go语言设计。它由Uber开源,并且在Go社区中非常受欢迎。它的设计目标是提供一个简单易用、高效稳定、灵活可扩展的日志系统。 以下是Zap的一些主要特点: 1.高性能:Zap的性能非常出…

【Linux】权限的理解

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…