java中栈的应用-大数的相加

java 栈的实现和应用 用java写的简单栈的实现,欢迎大家使用 立即下载

用栈实现两个大数相加

问题分析:整数是有最大上限的,所谓大数是超过整数最大上限的数,无法用整型来保存;

                  为把两个大数相加,可以把两个加数看成字符串,将这些数的相应数字储存在两个堆栈中,并将两个栈中弹出对应为的数字依次相加

算法归纳:

1。将两个加数的相应位从高位到低位写入栈中

2.依次弹出两个加数的栈顶(最低位)相加;

   若有进位,则将和的个位存入栈sum中,并将进位加到下一位的和中,若没有进位,则直接加入栈sum中

3.若其中一个栈为空,则将非空栈的栈顶数字依次弹出与进位相加,和的个位压入栈sum中,直到栈为空为止

若最高位有进位,则将1压入栈sum中

4若两个栈都为空,则sun栈中保存为计算结果,注意栈顶是结果中最高位的数字

import java.util.Stack;

public class Example3_2 {
	//求两个大数的和,加数以字符串的形式输入,(允许出现字符),计算结果也是字符串返回
	public String add(String a,String b) throws Exception{
		Stack sum=new Stack();
		Stack sA=numSplit(a);
		Stack sB=numSplit(b);
		int partialSum; //对于两个位的求和
		boolean isCarry=false;  //进位的标志
		while(!sA.isEmpty()&&!sB.isEmpty()){
			//将A,B取出栈顶(即最低位)相加
			partialSum=(Integer)sA.pop()+(Integer)sB.pop();
			if(isCarry){
				//如果需要进位,则加一,并将进位标志置false
				partialSum++;
				isCarry=false;
			}
			if(partialSum>=10){
				//若partialSum大于10,则减去10并将进位标志置true,最后压入栈中
				isCarry=true;
				partialSum-=10;
				sum.push(partialSum);
			}else{
				sum.push(partialSum);
			}
		}
		//若sA栈或者sB栈有一个为空或者两个都为空
		Stack temp=!sA.isEmpty()?sA:sB;//指向非空栈
		while(!temp.isEmpty()) {
			if(isCarry){
				int t=(Integer)temp.pop();
				++t;
				if(t>=10){
					t-=10;
					sum.push(t);
				}
				else {
					sum.push(t);
					isCarry=false;}
				}
			sum.push(temp.pop());
			}
		if(isCarry){
			sum.push(1);//若最高位需要进位,则进位
		}
		String str =new String();
		while(!sum.isEmpty()){
			//把栈中元素转换成字符串
			str=str.concat(sum.pop().toString());	
		}return str;
		}
	
	//将字符串从高位至低位依次写入栈中,并且去除字符串的空格,返回以单个字符作为元素的栈
	public Stack numSplit(String str) throws Exception{
		Stack<Object> s=new Stack<>();
		for(int i=0;i<str.length();i++){
			char c=str.charAt(i);
			//去除空格
			if(c==' '){
				continue;}
			else if(c>='0'&&c<='9'){
				//数字放入栈中
				s.push(Integer.valueOf(str.valueOf(c)));
			}else{
				//非法数字
				throw new Exception("错误:输入了非数字性的字符");
			}
		}
		return s;
	}

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Example3_2 e=new Example3_2();
		System.out.println("两个大数的和为:"+e.add("18 452 543 389 945 209 752 345 473", "8 123 542 678 432 986 899 334 "));

	}

}
运行结果如下:
两个大数的和为:18460666932623642739244807






        
栈的实现和应用(实验报告+代码) 实现了以下三个问题 1、 实现自己的顺序栈类; 2、 判断输入的字符串中的括号是否配对; 3、 输入一个后缀表达式,并进行求值。 立即下载

相关推荐

USB2.0基础知识总结

目录 1、协议层: 1.1、域分类 1.2 、USB传输方式: 1、协议层: 域和包定义:包是一次传输的单位,每个包由多个域组成; USB中是按照LSB进行字节传输; 1.1、域分类 1.1.1: 同步域(SYNC field) 所有的包都开始于同步域,在低速和全速通信中SYNC field用7个0和1个1来表示。 由于USB2.0使用了NRZI编码(0用翻转来表示,1用不翻转表示),所以00000001就是上图那样。 ...

qq_32938605的博客 4410

java数据结构和算法——栈(stack)实现综合计算器的应用示例

一、栈(stack)实现综合计算器的思路分析 二、栈(stack)实现综合计算器的代码示例 1、代码 package com.rf.springboot01.dataStructure.stack.calculatorStack; /** * @description: 栈(stack)实现综合计算器 * @author: xiaozhi * @create: 2020-07-27 13:45 */ public class Calculator { public static voi

小志的博客 574

告别Failed to start错误!保姆级教程:用Ubuntu20.04安装盘搞定GRUB与系统服务修复

本文提供Ubuntu20.04系统启动失败的专业修复指南,详细讲解如何利用安装盘解决GRUB与系统服务问题,避免重装系统导致的数据丢失。涵盖分区挂载、chroot环境操作、服务诊断与修复等实用技巧,帮助用户高效恢复系统正常运行。

weixin_32578161的博客 331

Java 栈 stack方法总结

前言 最近开始在重新刷leetcode,发现之前刷过的很多算法题现在又陆陆续续忘记了。真是应了那句话,面试造火箭,进去拧螺丝。刷了几道在贪心算法中使用stack来完成的。就重新总结下栈Stack的方法。 Stack和Collection的关系 Stack来自于Vector,那么显然stack的底层实现是数组。 Stack的方法 1. java中Stack只有一个无参构造函数。 2. 属于stack自己的方法包括 push( num) //入栈 pop() //栈顶元素出栈 empty() /

renxingzhadan的专栏 1万+

SAP批量程序(一)-静态批量EX,FX和期间批量MB,WB和TB

SAP批量程序(一)-静态批量和区间批量

weixin_38974136的博客 5478

RK3568平台(网络篇)WIFI模块RTL8821CU调试

RTL8821CU是瑞昱半导体推出的usb接口的wifi,下面的教程将介绍如何将RTL8821CU移植到rk3588的平台上。移植usb wifi需要修改的文件Android hal层需要修改的文件//kernel需要修改的文件kernel/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi //除去板上的sdio的wifi。

weixin_49303682的博客 3905

数据结构(java语言描述)顺序栈的使用(两个大数相加)

利用http://www.cnblogs.com/xleer/p/5289661.html中对顺序栈以及栈的进本方法的定义,实现超过整数上限的两个数的加法计算。 算法: package stack;/*********************************************************************** @author sch********利用栈,计...

weixin_30369087的博客 155

软考高级-系统架构设计师 论文范文参考(一)

系统架构设计师 论文参考

片言可决讼,半纸能缚龙 4341

Java链栈实现两个大数加法

整数是有上限的,所谓大数,是指超过整数最大上限的数,例如18452545389943209751345473, 它是无法用整数变量来保存的。为解决两个大数求和问题,可以把两个加数看成是数字字符串。 由于最先写的高位反而最后运算,满足栈先进后出的特性,因此选择用栈来解决这个问题。 操作步骤如下: 1)将两个加数的相应位从高位到低位依次压入栈sA和sB中。 2)若两个加数栈都

dly215011的博客 1018

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

相信读者基于Diagnostic/ISO TP Confighration中cdd、dll文件的测试并不陌生,本文基于其的基础上,介绍在capl中调用内置的函数diagGenerateKeyFromSeed实现27服务解锁,从而进行诊断自动化测试。本文基于4个byte的Seed、16个byte的Key的安全访问,实现27服务的自动化测试。需要加载项目使用的cdd文件,如果没有的情况下可以使用canoe例程中默认的cdd文件。

诊断协议那些事儿's blog 2054

PrimeTime low power-SMVA分析(4)

这些功能只有在将timing_enable_cross_voltage_domain_analysis变量设置为true时才能使用。DVFS场景与在分布式多场景分析(DMSA)中分析的运行条件场景无关。- check_timing 和 report_exceptions 命令通过将检查或报告应用于所有可能的场景和电压组合来支持SMVA。- 相位锁定环生成的时钟(create_generated_clock -pll_feedback 和 -pll_output)在多个场景的情况下,返回最差情况的值。

QRBQ 649

栈解决大数加法问题(Java实现)

*文中内容来源于《数据结构 --Java语言描述》(第二版) 刘小晶 杜选 主编 *此系列文章作为学习记录,若文中内容有误,请大家指出,谢谢 整数是有最大上限的。所谓大数就是超过整数最大上限的数。为解决两个大数的求和问题,可以将两个大数当成数字字符串,将这些数的相应数字存储在两个堆栈中,并从两个栈中弹出相应位的数字依次执行加法即可求解。 //求两个大数的和,加数和被加数以字符串的形式输入(允许大数...

Fam044的博客 643

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据结构Java实现——①栈-->栈的应用一、大数相加

几个比较有意思的栈的应用的例子 描述: 两个比较大的数(几百位)相加,如何才能处理

Stone6762的专栏 1632

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java 超大整数加法,java中栈的应用-大数的相加

用栈实现两个大数相加问题分析:整数是有最大上限的,所谓大数是超过整数最大上限的数,无法用整型来保存;为把两个大数相加,可以把两个加数看成字符串,将这些数的相应数字储存在两个堆栈中,并将两个栈中弹出对应为的数字依次相加算法归纳:1。将两个加数的相应位从高位到低位写入栈中2.依次弹出两个加数的栈顶(最低位)相加;若有进位,则将和的个位存入栈sum中,并将进位加到下一位的和中,若没有进位,则直接加入栈s...

weixin_35023786的博客 416

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java大数加1,数据结构Java实现——栈的应用1、大数相加

package org.Stone6762.MStack.adopt;import java.util.Scanner;import org.Stone6762.MStack.imple.LinkStack;/*** @author_Stone6762* @Description_大数相加* */public class BigAdd {/*** @Describe_将表示数字的字符串从高位到低位...

weixin_31491381的博客 275

栈——初步认识(Java实现)

今天来学习一下一个比较常用的数据结构——栈 栈 栈其实就是一个线性表,只不过比较特殊,特殊在它的插入删除操作都只在栈顶进行,符合后进先出(LIFO)的规则 ADT(抽象数据类型) 一个栈基本要实现的功能有哪些呢? 一个栈要实现的基本的功能有:将栈置空,判断栈是否为空,获取栈的长度,获取栈顶元素,出栈(同时获取出栈的栈顶元素) 知道这些就定义栈的接口IStack了: public interface IStack { public void clear();//置空 public boolean isEm

qq_52486831的博客 387

吃透这 6 道 Java 后端高频算法题,面试通过率直接拉满

本文精讲6道Java后端高频算法题(只出现一次的数字、搜索旋转排序数组等),涵盖位运算、二分查找、贪心、栈、回溯等核心思想,并提供多种Java实现方案(异或/Stream/Deque/数组模拟等),附详细复杂度分析与场景适用说明,助力校招社招与性能优化。

果酱 の 博客 1112

大数相乘、大数相加、大数相减Java版本

题目:两个非常大的数字相乘(相加,相减)        该题目在java中可以使用BigInteger类中的方法来实现。否则的话可以使用如下方式来实现。        大数相乘:假设有A和B两个大数,位数分别为a和b。根据我们平常手动计算乘法的方式可以看出,最终的结果的位数c

lichong_87的备忘录 2万+

两个大数相加(Java)

题目 两个大数相加 题目描述 两个大数相加。 1、是整数; 2、两个数无限大,long都装不下; 3、不能用BigInteger; 4、不能用任何包装类提供的运算方法; 5、两个数都是以字符串的方式提供。 思路 * 字符串逐位相加,需要进位则进位处理,考虑两个问题: * 1、char怎么转换为integer, 减去'0'即可 * 2、怎么处理对应位相加?反转字符串相加,正确处理进位即可,...

聚沙成塔 1万+

java 大数相加

java 大数相加 大数相加是指数字太大,超过了基本数据类型的表数范围,只能用字符串形式来表示数字。 注意:我们假定输入的两个数字字符串是符合规范的,如:“12344214141411124”。 代码如下: public static String addLargeNumber(String a, String b) { // 数字字符串a,b的倒数索引 int aIndex = 1; int bIndex = 1; // 进位

qq_43392001的博客 1643

string的实际应用 -- 大数相加 、大数相乘

哎,做题好难o(╥﹏╥)o,有时候想不到,而有时候则是想到了却没办法理清思路,转化为代码。有必要反思了┓(;´_`)┏,是否是做的太少了,或是自己的基础欠缺。大学总是有些迷茫~

T2004_S的博客 1167

大数相加

实现大数相加的多种方式

weixin_44750790的博客 201

两大数相加java

思路: 1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加; 2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加; 3.把两个正整数相加,一位一位的加并加上进位; 4.最高位有进位则补上。 实现 package cn.mryang.tools; public class BigData { public static String add(String n...

清风明月's blog 3244

java实现两个大数相加

使用java的几种基本类型计算大数(比long类型的最大数还大)的时候,编译器就会报错: 我们知道,java的基本数据类型有8种,而整型有4种 数据类型 byte short int long 二进制长度 8 16 32 64 数的范围 [-27,27-1] [-215,215-1] [-231,2^31-1] [-263,263-1] 最小数 -128 -32768 -2...

weixin_41788067的博客 1799
上一篇: java中栈的应用-判断分隔符是否合理
下一篇: java中栈的应用-带括号的算术表达式
oldbig_lin
博客等级 码龄10年 78粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值