计算器(栈、字符串)
题目:给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
例子:
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner (System.in);
String s=in.nextLine();
char[] sc=s.trim().toCharArray();//生成一个char数组,包含string的所有字符
//弄栈
Stack<Integer> st=new Stack();
/**
* 如果碰到空格则i++继续
* 碰到数字则对数字进行入栈
* 碰到‘+’‘-’‘*’‘/’:
* 加则直接入栈
* 减则num=-num入栈//注意:这里不能用num-=num!!!
* *则num=stack.pop()*num入栈
*'/'则num=stack.pop()/num入栈
*最后相加栈里面的数值则欧克
*/
int ans=0,i=0;
while(i<sc.length)
{
if(sc[i]==' ') {//从开始起考虑的空格
i++;continue;
}
char tmp=sc[i];
if(tmp=='*'||tmp=='/'||tmp=='+'||tmp=='-')
{
i++;
while(i<sc.length&&sc[i]==' ')i++;//考虑运算符之后是否有空格
}
int num=0;
//判断是否是数字,是true,否false
while(i<sc.length&&Character.isDigit(sc[i])) {
num=num*10+sc[i]-'0';
i++;
}
switch(tmp)
{
case '-':
num=-num;//注意这一步,不能采用num-=num;
break;
case '*':
num=st.pop()*num;
break;
case '/':
num=st.pop()/num;
break;
default:
break;
}
st.push(num);
}
while(!st.empty())
ans+=st.pop();
System.out.println(ans);
}
}
作者:Better又
出处:https://www.cnblogs.com/lwyy1223-/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。