Emacs号称神的编辑器,它自带了一个计算器。与其他计算器不同,它是基于后缀表达式的,即运算符在操作数的后面。例如“2 3
+”等价于中缀表达式的“2 + 3”。
请你实现一个后缀表达式的计算器。
输入包含多组数据。
每组数据包括两行:第一行是一个正整数n (3≤n≤50);紧接着第二行包含n个由数值和运算符组成的列表。
“+-*/”分别为加减乘除四则运算,其中除法为整除,即“5/3=1”。
对应每一组数据,输出它们的运算结果。
3 2 3 + 5 2 2 + 3 * 5 2 2 3 + *
5 12 10
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
String str = sc.nextLine();
int[] nums = new int[n];
char[] arr = sc.nextLine().toCharArray();
int i = 0 , size = 0;
for(char ch : arr){
if(ch == '+'){
add(nums,--size);
--size;
}else if(ch == '-'){
sub(nums,--size);
--size;
}else if(ch == '*'){
mul(nums,--size);
--size;
}else if(ch == '/'){
div(nums,--size);
--size;
}else if(ch != ' '){
nums[size] = nums[size] * 10 + ch - '0';
}else{
size++;
}
}
System.out.println(nums[0]);
}
}
private static void add(int[] nums,int index){
nums[index-1] = nums[index-1] + nums[index];
nums[index] = 0;
}
private static void sub(int[] nums,int index){
nums[index-1] = nums[index-1] - nums[index];
nums[index] = 0;
}
private static void mul(int[] nums,int index){
nums[index-1] = nums[index-1] * nums[index];
nums[index] = 0;
}
private static void div(int[] nums,int index){
nums[index-1] = nums[index-1] / nums[index];
nums[index] = 0;
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = Integer.parseInt(sc.nextLine());
String[] str = sc.nextLine().split(" ");
Stack<String> stack = new Stack<>();
int sum = 0;
for(int i = 0; i < n; i++){
if(!str[i].equals("+") && !str[i].equals("-")
&& !str[i].equals("*") && !str[i].equals("/")){
stack.push(str[i]);
}
else{
int a = Integer.parseInt(stack.pop());
int b = Integer.parseInt(stack.pop());
if(str[i].equals("+")){
sum = a + b;
}
if(str[i].equals("-")){
sum = b - a;
}
if(str[i].equals("*")){
sum = a * b;
}
if(str[i].equals("/")){
sum = b / a;
}
stack.push(String.valueOf(sum));
}
}
System.out.println(stack.pop());
}
}
}