zoukankan      html  css  js  c++  java
  • 计算器(栈、字符串)

    题目:给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

    表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  。 整数除法仅保留整数部分。

    例子:
    示例 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-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    HP DL60 Gen9 安装CentOS 6.5
    导出excel的另外一种方法 作者 roc 日期 2006224 10:26:00
    JS获取屏幕大小
    jQuery获取Select选择的Text和 Value(转)
    阿拉伯數字換中文小寫
    html Frame 框架 点击伸缩
    JQuery datepicker 用法
    js 弹出对话框3种方式(摘)
    水晶报表中提示已达到系统管理员配置的最大报表处理作业数限制
    C# 操作word (转)
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/13757622.html
Copyright © 2011-2022 走看看