Java实现基于栈实现整数加法算法

整数是有最大上限的,如果整数超出最大上限位数,如 4398912120931092319+49832232849329019019210921029,此时整型变量无法保存这些数字.解 决的办法是,可利用字符串保存这些数字,再利用栈做按位加法.

1.用Java实现,首先使用链表LinkedList构造栈数据结构.

import java.util.LinkedList;
public class IntStack {
   private LinkedList<Integer> storage = new LinkedList<Integer> ();
   /** 入栈 */
   public void push(int v) {
     storage.addFirst(v);
   }
   /** 出栈,但不删除 */
   public int peek() {
     return storage.getFirst();
   }
   /** 出栈 */
   public int pop() {
     return storage.removeFirst();
   }
   /** 栈是否为空 */
   public boolean empty() {
     return storage.isEmpty();
   }
   /** 打印栈元素 */
   public String toString() {
     return storage.toString();
   }
}

2.使用栈加法操作.

2.1栈oper1和栈oper2分别保存两个加数,栈result保存结果;

2.2方法pushNum(String soper1, String soper2)将两个数字字符串分别保存于两个栈中 ;

2.3方法add()进行加法操作,具体算法是:

[1]整型变量addition保存一个十位值,只能取值0或1,两个9相加为18;

[2]循环从两个栈中取数据,将相加的结果的个位值保存于栈result,十位值保存于整型变 量addition;

[3]整型变量addition初始值为0,每次要参与下一轮运算;

[4]当某加数栈(栈oper1或栈oper2)为空后,直接将另一个栈的数据复制到栈result;

时间: 2024-04-20 06:55:12

Java实现基于栈实现整数加法算法的相关文章

Java中基于栈和队列的排序算法

题目1:使用一个辅助栈和一些附加非数组变量将堆栈S中的元素按升序存储. 题目2:使用一个辅助队列和一些附加非数组变量将队列Q中的元素按升序存储. 1.用Java实现,首先使用链表LinkedList构造栈数据结构. import java.util.LinkedList; public class IntStack { private LinkedList<Integer> storage = new LinkedList<Integer> (); /** 入栈 */ public

解密随机数生成器(二)——从java源码看线性同余算法

Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术的3.2.1节) 如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的 也可以调用Math.random()生成随机数 Random实例是线程安全的,但是并发使用Random实例会影响效率,可以考虑使用java.util.concurrent.ThreadL

java语言中哪一种排序算法用的最多?

问题描述 java语言中哪一种排序算法用的最多? java语言中哪一种排序算法用的最多?快速排序既然效率高,为什么我们还要用冒泡呢?冒泡的好处是什么? 解决方案 不能说快速排序一定效率高,对于有序的序列,归并排序的效率就更高.对于大量小整数的排序,基数排序不但效率高,而且占用内存少.各种排序有不同的使用场合.所以都要学习,而不是问哪种常用. 解决方案二: 冒泡排序是用来理解排序的思路的,快速排序是默认的java排序,但是稳定性极差,建议你去百度八大排序,从快速插入排序开始,系统的学习理解排序.

基于投票的热门计数算法策略

类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中, 典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序.   一.Hacker News的排序算法   Hacker News是一个主题社区,用户可以为主题投票,根据得票数,系统自动统计出热门文章排行榜. 同时主题发表时间也会对排名产生影响,新发表的主题比旧的主题更容易得到好的排名.   Hacker News的排名算法是这样实现的:   (p – 1) / (t + 2)^G 其中, P表示帖子

java实现任意四则运算表达式求值算法_C 语言

本文实例讲述了java实现任意四则运算表达式求值算法.分享给大家供大家参考.具体分析如下: 该程序用于计算任意四则运算表达式.如 4 * ( 10 + 2 ) + 1 的结果应该为 49. 算法说明: 1. 首先定义运算符优先级.我们用一个 Map<String, Map<String, String>> 来保存优先级表.这样我们就可以通过下面的方式来计算两个运算符的优先级了: /** * 查表得到op1和op2的优先级 * @param op1 运算符1 * @param op2

如何实现基于C4.5的Adaboost算法

问题描述 如何实现基于C4.5的Adaboost算法 现有的Adaboost算法只能对二类分类,而基于决策树的集成如何更新权重 解决方案 参考:http://www.docin.com/p-595686917.html

基于用户投票的排名算法(一)Delicious和Hacker News

互联网的出现,意味着"信息大爆炸". 用户担心的,不再是信息太少,而是信息太多.如何从大量信息之中,快速有效地找出最重要的内容,成了互联网的一大核心问题. 各种各样的排名算法,是目前过滤信息的主要手段之一.对信息进行排名,意味着将信息按照重要性依次排列,并且及时进行更新.排列的依据,可以基于信息本身的特征,也可以基于用户的投票,即让用户决定,什么样的信息可以排在第一位. 下面,我将整理和分析一些基于用户投票的排名算法,打算分成六个部分连载,今天是第一篇. 一.Delicious 最直觉

.NET CIL系列第二篇:入栈和出栈——CIL基于栈的本质

在上一篇.NET CIL第一篇:CIL介绍和入门中我们简要介绍了CIL编程的本质,和学习CIL编程的价值.还介绍了CIL的指令.特性和操作码.接下来的文字中会频繁出现:指令.特性.操作码这些关键字.所以请确定你已经知道它们的含义了. 入栈和出栈:CIL基于栈的本质 像C#这样的高级.NET语言,总是试图尽量隐藏底层的实现..NET开发一个不太为人注意的方面就是CIL实际上是一个完全以栈为基础的开发语言.回忆我们熟悉的System.Collections命名空间中的Stack类型的功能,它被用于压

基于先验方向的pca算法

问题描述 基于先验方向的pca算法 假如存在一个已知的方向,在其正交方向寻找一个能最大程度反映原有信息的方向,怎么实现?