java中栈的应用-大数的相加
来源:互联网 发布:淘宝上没有点击量 编辑:程序博客网 时间:2024/06/06 06:33
用栈实现两个大数相加
问题分析:整数是有最大上限的,所谓大数是超过整数最大上限的数,无法用整型来保存;
为把两个大数相加,可以把两个加数看成字符串,将这些数的相应数字储存在两个堆栈中,并将两个栈中弹出对应为的数字依次相加
算法归纳:
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){//如果需要进位,则加一,并将进位标志置falsepartialSum++;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 stubExample3_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
2 0
- java中栈的应用-大数的相加
- java中大数相加
- 数据结构Java实现——①栈-->栈的应用一、大数相加
- 栈的应用2——大数相加
- java ACM 大数相加使用的bigInteger
- 大数相加的问题
- 大数的相加、相减
- 大数的相加
- 我的大数相加
- ACM-Java中大数的应用
- HDU1002 A + B Problem II--大数相加的应用
- 大数相加算法的实现
- 大数相加的简单实现
- 我的大数相加模板
- NOJ上的大数相加
- 1002题大数的相加
- Java大数相加的问题(杭电ACM1047)
- java大数类的应用
- 删除表的主键
- 微信分享
- 【互联网资讯】亚多利是什么?
- MDK调试STM32出现“could not stop cortex-m device”解决办法
- BottomSheetDialog的使用及注意事项
- java中栈的应用-大数的相加
- Android开发进阶—跨进程通信(IPC)使用AIDL(上)
- JAVA面试问题假想1
- java网络通信——socket
- ACM
- Mysql主从数据延迟
- 3.5Javascript函数-带返回值的函数
- 使用PreparedStatement执行sql语句
- Eclipse如何自动提示:点加全字母激活提示