请使用三个栈来实现一个整数加法器(java数据结构学习笔记)

学习笔记:题目出自清华大学出版社《Java软件结构与数据结构》(第四版),若要引用请标明出处。
我认使用三个栈进行模拟竖式运算,是这个程序的最优解法(毕竟其他方法体现不太出栈的优越性)


import java.util.Stack;
import java.util.Scanner;
public class Text 
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner (System.in);
        Stack<Integer>stack1 = new Stack<>();
        Stack<Integer>stack2 = new Stack<>();
        Stack<Integer>anwser = new Stack<>();
        String str1 = input.nextLine();
        String str2 = input.nextLine();
        int max;
        Integer zero = 0;
        if(str1.length()>str2.length())
        {
            max = str1.length();
            for(int i=0;i<(max-str2.length());i++)
            {
                stack2.push((Integer)zero);
            }
        }
        else if(str1.length()<str2.length())
        {
            max = str2.length();
            for(int i=0;i<(max-str1.length());i++)
            {
                stack1.push((Integer)zero);
            }
        }
        else
        {
            max = str1.length();
        }
        for(int i=0;i<str1.length();i++)
        {
            char ast1 = str1.charAt(i);
            int finan1 = (int)ast1-48;
            stack1.push(finan1);
        }
        for(int i=0;i<str2.length();i++)
        {
            char ast2 = str2.charAt(i);
            int finan2 = (int)ast2-48;
            stack2.push(finan2);
        }
        //错误:第一次使用stack.size()作为长度标量,但是这个值是会随着程序的运行而变化的
        /*for(int i=0;i<str1.length();i++)
        {
            System.out.print(stack1.pop());
        }
        System.out.println();
        for(int i=0;i<str2.length();i++)
        {
            System.out.print(stack2.pop());
        }*/
        //这个检验部分一开始忘记删去,使栈中的数据全部丢失,重复出现空栈异常。
        int ps=0,temp=0;
        for(int i=1;i<max;i++)
        {   
            temp = stack1.pop()+stack2.pop()+ps;
            ps=temp/10;
            temp=temp%10;
            anwser.push(temp);
            temp=0;
        }
        temp = stack1.pop()+stack2.pop()+ps;
        anwser.push(temp);
        for(int i=0;i<max;i++)
        {
            temp=anwser.pop();
            System.out.print(temp);
        }
        input.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值