数据结构---大整数相加

news2024/9/20 0:58:40

大整数相加

  • 列竖式运算
    • 第一步
    • 第二步
    • 第三步
    • 第四步
  • JAVA实现

给出两个很大的整数,要求实现程序求出两个整数之和。

记得这个题目我大二ACM课程老师讲过,但是忘记了。。。。。。。。。。

列竖式运算

在这里插入图片描述
程序不可能通过一条指令计算出两个大整数之和,但我们却可以把大运算拆解成若干小运算,像小学生列竖式一样进行按位计算。
用数组存储大数:数组的每一个元素,对应着大整数的每一个数位。

第一步

创建两个整型数组,数组长度是较大整数的位数+1
把每一个整数倒序存储到数组中
整数的个位存于数组下标为0的位置,最高位存于数组的尾部。
之所以倒序存储,是因为这样更符合从左到右访问数组的习惯。

第二步

创建结果数组,结果数组的长度同样是较大整数的位数+1,
+1的目的是给最高位进位预留的。

第三步

遍历两个数组,从左到右按照对应下标把元素两两相加

第四步

把result数组的全部元素再次逆序,去掉首位的0(没有进位的情况),就是最终结果。

例子:
426 709 752 31 8 +95481 253 129
第一步
在这里插入图片描述
第二步
在这里插入图片描述

第三步
在这里插入图片描述
在这里插入图片描述
以此类推……一直把数组的所有元素都相加完毕。

在这里插入图片描述
第四步
在这里插入图片描述

JAVA实现

利用加‘0’和减‘0’完成char和int相互转换:JAVA中char转int小Tips

 /**
     * 大整数求和
     * @param bigNubmerA  大整数A
     * @param bigNumberB  大整数B
     * @return
     */
    public static String bigNumberSum(String bigNubmerA,String bigNumberB){
        //1.把两个大整数用数组逆序存储,数组长度等于较大整数位数+1
        int maxLength = bigNubmerA.length()>bigNumberB.length()?bigNubmerA.length():bigNumberB.length();
        int[]arrayA = new int[maxLength+1];
        int[]arrayB = new int[maxLength+1];
        for (int i=0;i<bigNubmerA.length();i++){
            //为了符合正常逻辑,数组的低位存储大数的低位
            arrayA[i] = bigNubmerA.charAt(bigNubmerA.length()-1-i)-'0';
        }
        for (int a:arrayA){
            System.out.print(a);
        }
        System.out.println();
        for (int i=0;i<bigNumberB.length();i++){
            //为了符合正常逻辑,数组的低位存储大数的低位
            arrayB[i] = bigNumberB.charAt(bigNumberB.length()-1-i)-'0';
        }
        for (int b:arrayB){
            System.out.print(b);
        }
        System.out.println();
        //2.构建result数组,数组长度等于较大整数位数+1
        int[] result = new int[maxLength+1];
        //3.遍历数组,按位相加
        for (int i = 0;i<result.length;i++){
            int temp = result[i];
            temp = temp+arrayA[i];
            temp = temp+arrayB[i];
            //判断是否进位
            if(temp>9){
                //进位操作
                temp = temp-10;
                result[i+1] = 1;
            }
            result[i] = temp;
        }
        //4.把result数组再次逆序并转成String
        StringBuffer sb = new StringBuffer();
        //是否找到大整数的最高有效位
        boolean findFirst = false;
        //从result高位开始遍历
        //应为result高位就是实际数字的低位
        for (int i= result.length-1;i>=0;i--){
            if(!findFirst){
                if(result[i]==0){
                    //说明高位是0,就再次循环,直到result[i]!=0时,才跳出
                    continue;
                }
                findFirst = true;
            }
            //到这一步,说明已经找到了非0最高位,就直接append就行
            sb.append(result[i]);
        }

        return sb.toString();
    }

测试方法:

    public static void main(String[] args) {
        System.out.println(bigNumberSum("426709752318","95481253129"));
    }

在这里插入图片描述

这里为了方便存储数据查看,我以200+300为例子:
在这里插入图片描述

关键在于第四步代码需要注意
如何找到result的最高位,并开始遍历。。
借助findFirst标记和循环、continue

//4.把result数组再次逆序并转成String
        StringBuffer sb = new StringBuffer();
        //是否找到大整数的最高有效位
        boolean findFirst = false;
        //从result高位开始遍历
        //应为result高位就是实际数字的低位
        for (int i= result.length-1;i>=0;i--){
            if(!findFirst){
                if(result[i]==0){
                    //说明高位是0,就再次循环,直到result[i]!=0时,才跳出
                    continue;
                }
                findFirst = true;
            }
            //到这一步,说明已经找到了非0最高位,就直接append就行
            sb.append(result[i]);
        }

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

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

相关文章

【学习打卡04】可解释机器学习笔记之Grad-CAM

可解释机器学习笔记之Grad-CAM 文章目录可解释机器学习笔记之Grad-CAMGrad-CAM介绍Grad-CAM是CAM的泛化形式Gard-CAM可视化结果Grad-CAM算法的优点Grad-CAM算法的缺点Grad-CAM变种Grad-CAMScore-CAMLayer-CAM思考与总结参考阅读首先非常感谢同济子豪兄拍摄的可解释机器学习公开…

SAP S4 FICO 固定资产模块后台配置详解

1. 概述 资产会计&#xff08;FI-AA&#xff09;作为总帐模块&#xff08;FI-GL&#xff09;的子分类帐&#xff0c;对企业的固定资产、无形资产、在 建工程、低值易耗品、长期待摊、从购置、资本化、折旧、调拨到出售/报废的整个生命周期 进行全过程的管理&#xff0c;并和…

java实现给微信群中定时推送消息

大家好&#xff0c;我是雄雄。 前言 上一篇&#xff0c;我们介绍了如何通过调用接口的方式&#xff0c;将每日新闻发送到自己的博客中。我们会发现&#xff0c;将新闻以文章的形式发布&#xff0c;并且相关内容按照markdown的形式进行格式调整&#xff0c;有需要的可以点击这里…

获取小程序生产、开发、体验等环境、版本信息、appid等信息

if (typeof __wxConfig "object"){const version __wxConfig.envVersion;console.log("当前环境:" version)if (version "develop"){cosole.log(测试 开发环境)}else if (version "trial"){cosole.log(测试 体验版)}else if (versio…

【电力系统】基于YALMIP+CPLEX求解带储能的微电网优化调度问题附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【树莓派不吃灰】兄弟连篇② 文件编辑器vim与RPM软件包管理、yum

目录1、文件编辑器Vim1.1 工作模式1.2 插入命令1.3 定位命令1.4 删除命令1.5 复制和剪切命令1.6 替换和取消命令1.7 搜索和搜索替换命令1.8 保存和退出命令1.9 使用技巧2、yum包管理2.1 网络yum源2.2 yum命令2.3 rpm包与源码包安装位置❤️ 博客主页 单片机菜鸟哥&#xff0c;一…

联盛德W801开发板流水灯示例

联盛德W801开发板流水灯示例&#x1f4fa;&#x1f4fd;&#x1f39e;&#x1f3ac;本实验通过利用开发板中间的7个led&#xff0c;控制对应的IO实现流水灯效果。 &#x1f4dc;W801 32位WiFi蓝牙双模SoC开发板 &#x1f6e0;开发工具以及示例Demo工程 参考&#xff1a;《W801…

【数学模型】基于ARMR模型模拟风速附matlab完整代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

图计算的学习与思考

好的软件不是靠程序分析、查错查出来的&#xff0c;而是由正确的人构建出来的。图成为日益重要的运算对象&#xff0c;图结构是对群体关系的一种抽象&#xff0c;可以描述丰富的对象和关系。图计算的核心是如何将数据建模为图结构以及如何将问题的解法转化为图结构上的计算问题…

MySQL高级【存储引擎】

目录 1&#xff1a;Mysql体系结构图&#xff1a; 2&#xff1a;存储引擎简介 3&#xff1a;存储引擎特点 InnoDB存储引擎&#xff1a; MyISAM存储引擎&#xff1a; Memory存储引擎&#xff1a; 4&#xff1a;存储引擎选择 5&#xff1a;存储引擎小结 1&#xff1a;Mysq…

.net core 在arm linux 上运行

一、环境 开发板&#xff1a;OKMX6ULL 硬件&#xff1a;cortex A7 软件环境&#xff1a;Linux version 4.1.15-00041-g92e8c0f (zsdeveloper-RH2485-V2) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Mon May 24 17:20:23 CST 2021 .net core 版本&#xff1a; 二、问题 1…

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了。 ShellPhish是一个可定制的网络 go-fish 工具,基于SocialFish。 支持以下社交平台: Instagram Facebook Twitter Snapchat Github Yahoo…

Linux学习笔记——Linux基础命令

02、Linux基础命令 2.1、Linux的目录结构 1、学习目标 掌握Linux系统的目录结构掌握Linux系统的路径表达式 2、Linux的目录结构是一个树型结构 Windows系统可以拥有多个盘符&#xff0c;如C盘、D盘、E盘 Linux没有盘符这个概念&#xff0c;只有一个根目录/&#xff0c;所有…

【大数据趋势】趋势在发生变化,稍安勿躁。

昔日(12月以前)行情核心源头 : 纳斯达克指数主连日线&#xff0c;趋势预测准确&#xff0c;继续筑底可能中 回顾一下上周大数据预测的趋势&#xff0c;指数用上引线方式神奇完成目标 【12.3趋势模拟情况】 预计&#xff1a;趋势不变情况下&#xff0c;预测反弹到黄金分割线…

基于预训练和对比学习的新意图发现

前言 从对话人的语句中发现新意图是一个研究方向 一般来说就是对句子通过聚类来解决这一问题&#xff0c;所以这里通常会涉及到两个问题&#xff1a; &#xff08;1&#xff09;怎么表征好一个句子 &#xff08;2&#xff09;怎么更好的聚类 今天就给大家介绍本篇&#xff5e;&…

通信技术对自动驾驶发展的关键作用

【摘 要】随着自动驾驶的快速发展,新技术逐渐涌现,通信技术被产业认为是未来网联化自动驾驶发展的关键技术。从通信角度出发,分析通信技术为自动驾驶在技术及可靠性、成本控制、以及社会效益方面带来的提升,详细介绍了3GPP R16 5G-V2X在自动驾驶业务方面带来的技术优化,并…

Spring Boot整合分布式搜索引擎ElasticSearch 实现相关基本操作

文章目录一、ElasticSearch 介绍二、环境准备三、创建Spring Boot项目导入依赖四、创建高级客户端五、基本操作索引操作文档操作批量插入数据其他操作六、总结一、ElasticSearch 介绍 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据…

【MySQL】史上最全的MySQL高性能优化总结

【MySQL】史上最全的MySQL高性能优化总结 【1】深入理解MySQL索引底层数据结构与算法 1. 为什么不使用二叉树、红黑树、B树来作为索引&#xff1f; 2. MyISAM 与 Innodb存储引擎有什么区别&#xff1f; 3. MySQL 的索引按照功能分类可以分几种&#xff1f; 4. MySQL 的的聚…

《领导力就是不装》——读书摘要

最近阅读的这本领导力就是不装–游戏化思维引领管理变革&#xff0c;分析问题的视角有新意&#xff0c;值得一看。以下是我的一点读书摘要。 领导力的三个关键点 具备进行管理变革、引领大家去解决难题的能力。具备成就他人、成就团队&#xff0c;让人才涌现&#xff0c;引领…

100天精通Python(数据分析篇)——第69天:Pandas常用数据筛选方法(between、isin、loc、iloc)

文章目录每篇前言一、布尔索引二、between()三、isin()1. 单列筛选2. 多列筛选3. 通过字典的形式传递多个条件4. 删除异常值所在行5. isnotin实现四、loc、iloc&#xff08;重要&#xff09;0. 创建DataFrame1. 提取行数据2. 提取列数据3. 提取多列数据4. 提取指定行、指定列数…