记录一个当时没有做出来的超大数相加

2023-05-16

转载请以链接形式标明出处:

本文出自:103style的博客

主要是 一个 正数 一个负数的情况。
保证测试用例 输入字符串是正常的正负整数。
正负数的字符串长度 不超过 10^9.

public class LeetCode {
    public static void main(String[] args) {
        System.out.println(new LeetCode().addString("-12312", "12312"));
        System.out.println(-12312 + 12312);

        System.out.println(new LeetCode().addString("-145", "12312"));
        System.out.println(-145 + 12312);

        System.out.println(new LeetCode().addString("154545", "954545"));
        System.out.println(154545 + 954545);

        System.out.println(new LeetCode().addString("123", "5689"));
        System.out.println(123 + 5689);

        System.out.println(new LeetCode().addString("-123", "-5689"));


    }

    public String addString(String a, String b) {
        if ((a.charAt(0) == '-') != (b.charAt(0) == '-')) {
            // 一正一负
            if (a.charAt(0) == '-') {
                return check(a, b);
            } else {
                return check(b, a);
            }
        } else if (a.charAt(0) == '-' && b.charAt(0) == '-') {
            //都是负数
            return "-" + addString(a.substring(1), b.substring(1));
        }
        //都是正数
        char[] arr1 = a.toCharArray();
        char[] arr2 = b.toCharArray();
        int len = Math.max(arr1.length, arr2.length) + 1;
        int[] res = new int[len];
        int t = 0;
        for (int i = len - 1; i >= 0; i--) {
            int indexA = (arr1.length - (len - i));
            int indexB = (arr2.length - (len - i));
            int numA = indexA < 0 ? 0 : (arr1[indexA] - '0');
            int numB = indexB < 0 ? 0 : (arr2[indexB] - '0');
            t += numA + numB;
            res[i] = t % 10;
            t = t / 10;
        }
        int i = 0;
        while (res[i] == 0) i++;
        StringBuilder builder = new StringBuilder();
        while (i < len) builder.append(res[i++]);
        return builder.toString();
    }

    private String check(String negative, String positive) {
        if (negative.length() - 1 > positive.length()) {
            return "-" + sub(negative.substring(1), positive);
        } else if (negative.length() - 1 < positive.length()) {
            return sub(positive, negative.substring(1));
        } else {
            for (int i = 0; i < positive.length(); i++) {
                if (negative.charAt(i + 1) > positive.charAt(i)) {
                    return "-" + sub(negative.substring(1), positive);
                } else if (negative.charAt(i + 1) < positive.charAt(i)) {
                    return sub(positive, negative.substring(1));
                }
            }
            return "0";
        }
    }


    private String sub(String a, String b) {
        //a > b 求 a - b
        char[] arrA = a.toCharArray();
        char[] arrB = b.toCharArray();
        int t = 0;
        for (int i = 0; i < arrA.length; i++) {
            int index = arrB.length - 1 - i;
            int numB = index < 0 ? 0 : (arrB[arrB.length - 1 - i] - '0');
            int numA = arrA[arrA.length - 1 - i] - '0';
            t = numA - numB - t;
            if (t >= 0) {
                arrA[arrA.length - 1 - i] = (char) ('0' + t);
                t = 0;
            } else {
                arrA[arrA.length - 1 - i] = (char) ('0' + (10 + t));
                t = 1;
            }
        }
        return new String(arrA);
    }
}


扫描下面的二维码,关注我的公众号 103Tech, 点关注,不迷路。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录一个当时没有做出来的超大数相加 的相关文章

  • mysql 判断字段否存在,如果存在就修改字段

    先建一个存储过程 xff0c 再执行存储过程 xff0c 然后删掉存储过程 DROP PROCEDURE IF EXISTS proc tempPro CREATE PROCEDURE proc tempPro BEGIN SELECT c
  • mysql 常用脚本整理

    MySQL 来自各种资源 及部分自己实践 添加字段 ALTER TABLE 表名 ADD COLUMN 列名 类型 comment 39 说明 39 ALTER TABLE User ADD COLUMN shorName varchar
  • Docker Center OS7笔记--删除镜像(httpd)

    删除镜像 xff08 httpd xff09 1 docker stop docker ps a q 停止所有容器 2 docker ps a 查看容器 3 docker rm 容器ID 删除容器 删除后 xff0c 就没有容器了 4 do
  • SqlServer 2008R2 10.50.1600.1 升级到 SqlServer 2016

    要从sql server 2008 R2 企业版 直接升级到 2016 企业版 要先把R2升级到SP3这个版本 xff08 注意 xff1a 不是sp1 sp2 sp3的安全更新 坑 xff09 然后去下载2016 去itellyou下载
  • C#委托与事件

    1 什么是委托 委托是C 中的一个引用类型 它允许捕捉对方法的引用 xff0c 并像传递其他对象那样传递该引用 xff0c 也可以像调用其他方法一样调用被捕捉的方法 声明委托需要使用delegate关键字 xff1a span class
  • 数据分发服务 (DDS)及Fast DDS环境搭建

    1 数据分发服务 DDS 数据分发服务 DDS 是一种以 数据为中心的通信协议 xff0c 用于分布式软件应用程序通信 它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口 API 和通信语义 由于它是一个以数据为中心的发布订阅
  • Docker管理工具Web UI:DockerUI & Shipyard /portainer

    docker针对于系统工程师或者开发人员来说操作比较简单 一般我们习惯了对着黑黑的屏幕敲命令 xff0c docker pull xff0c docker push xff0c docker run xff0c docker logs xf
  • BeautifulSoup+pandas 爬取新浪国内新闻

    xff08 1 xff09 使用技术 python 3 5 2 sqlite3 pandas requests jupyter notebook xff08 2 xff09 详细代码 新浪国内新闻首页 xff1a http news sin
  • android8.1客制化修改文档

    1 去除设置 系统 关于手机 硬件信息去掉 vendor mediatek proprietary packages apps MtkSettings res xml device info settings xml中删除布局文件 xff0
  • C/C++总结笔记——指针1:野指针、空指针(NULL和nullptr)、悬空指针、智能指针

    C C 43 43 中有几种指针相关的概念 xff0c 只知道有这样的概念 xff0c 但HR一问就露馅 xff0c 这里进行总结方便复习 1 野指针 1 指针定义时未被初始化 xff1a 指针在被定义的时候 xff0c 如果程序不对其进行
  • ARM汇编的编程模式和工作模式

    ARM采用32位架构 ARM 约定 Byte 8bitsHalfword 16bits 2byteWord 32 bits 4bytes ARM core 的指令集 ARM指令集 32 bitThumb指令集 xff08 沙姆 xff09
  • 嵌入式开发内存节约方法(笔记)

    1 不要在 h文件中定义变量 xff0c 可以声明一个extern全局变量 xff0c 定义在某一个 c文件中进行 其他 c文件即可共用 在源文件中引入头文件相当于直接把头文件的内容拷贝到原文件中 xff0c 如果引入这个头文件后 xff0
  • Linux内核进程上下文切换深入理解

    我们知道操作系统的一个重要功能就是进行进程管理 xff0c 而进程管理就是在合适的时机选择合适的进程来执行 xff0c 在单个cpu运行队列上各个进程宏观并行微观串行执行 xff0c 多个cpu运行队列上的各个进程之间完全的并行执行 进程管
  • 尚医通开发笔记(结尾含部分bug修复方法)

    目录 项目简介 xff1a 包含系统 项目架构 前端开发流程 xff1a common模块 swagger2 Result xff08 全局统一返回结果 xff09 YyghException xff08 自定义全局异常 xff09 Glo
  • 树莓派上的软件安装和卸载命令汇总

    基础命令 安装软件 apt get install softname1 softname2 softname3 卸载软件 apt get remove softname1 softname2 softname3 卸载并清除配置 apt ge
  • ubuntu安装KDE桌面环境

    ubuntu安装KDE桌面环境 打开shell环境 xff0c 执行sudo apt get install kubuntu desktop xff0c 然后会提示一大堆的软件包要安装 xff0c 注意安装好之后有1G多 lxc 64 lx
  • 游戏开发书籍推荐

    游戏开发书籍推荐 xff08 1 3 1 Windows游戏编程大师技巧 xff08 第二版 xff09 原名 xff1a Tricks of the Windows Game Programming Gurus 2nd 作者 xff1a
  • ROS实战之ROS组网的搭建

    搭建ROS组网 工具 xff1a 台式机 xff08 Ubuntu xff09 xff1a 192 168 2 101 笔记本 xff08 虚拟机 xff09 xff1a 192 168 2 106 步骤 xff08 此处以在笔记本中运行r

随机推荐