计算科学表达式
来源:互联网 发布:参观美术馆的作文300乎 编辑:程序博客网 时间:2024/04/28 19:27
前段时间去小米面试,让写一个计算表达式的值的代码 不考虑非法输入
由于是第一次参加面试,有些紧张,很蠢没很好的写出来。
回来看了看网上的代码也都好长,今天上午没事就写了一个比较精简的,自己试了些样例都还是正确的。
代码如下:
import java.util.Stack;public class ComputerString {public double computer(String str){char[]chs=str.toCharArray();Stack<Character> st=new Stack<Character>();for(char ch:chs){if(ch!=')') st.add(ch);else{Stack<Character> res=new Stack<Character>();char temp=st.pop();while(temp!='('){res.add(temp);temp=st.pop();}double sum=stackSum(res);st.add((char) (sum+'0'));}}Stack<Character> st1=new Stack<Character>();while(!st.isEmpty()) st1.add(st.pop());return stackSum(st1);}private double stackSum(Stack<Character> res) {if(res.isEmpty()) return 0;// TODO Auto-generated method stubStack<Double> stc=new Stack<Double>();stc.add((double) (res.pop()-'0'));while(!res.isEmpty()){char temp=res.pop();if(temp=='*')stc.add(stc.pop()*(res.pop()-'0'));else if(temp=='/')stc.add(stc.pop()/(res.pop()-'0'));else if(temp=='+')stc.add((double) (res.pop()-'0'));elsestc.add((double) ((res.pop()-'0')*-1));}double sum=0.00;while(!stc.isEmpty())sum+=stc.pop();return sum;}public static void main(String[] args){ComputerString cs=new ComputerString ();String str="(1+2)+3*3/(1+3)*2";System.out.printf("%.2f",cs.computer(str));}}唯一要注意打的是 char 与double、int的互转
char-》int ch-'0';
int-char (char)(int+'0')
0 0
- 计算科学表达式
- 科学计算
- MATLAB科学计算应用
- 信息与计算科学
- 信息与计算科学
- 科学计算的特点
- C++科学计算库
- Python科学计算
- python科学计算库
- Scipy:高端科学计算
- Python科学计算
- python 科学计算
- scipy: 科学计算
- scipy: 科学计算
- python科学计算
- python科学计算
- Scipy:高端科学计算
- python科学计算环境
- mui初级入门教程 — 模板页面实现原理及多端适配指南
- Java泛型详解
- CorelDRAW X8怎么更改页面背景颜色
- C#中抽象类和接口的区别
- 程序编程规范——程序版式和变量命名规则
- 计算科学表达式
- 理财平台C++定时结算任务的容灾问题的解决方案
- 迈出数据分析与机器学习的第一步
- 数据库设计范式
- 区块链协议战争中谁将是最后的赢家?比特币 or ETH?
- spring ioc 原理
- java基础知识总结4面向对象类与方法
- linux中tail 命令使用详解(显示最尾部的内容)
- 注册表项查询的一般操作流程