学习笔记:题目出自清华大学出版社《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();
}
}