计算器--可以计算合理表达是的计算器,包括+-×/()
来源:互联网 发布:protools mac破解版 编辑:程序博客网 时间:2024/04/29 16:47
参考了
1.王道的机试复试书
#include <stdio.h>#include <cstring>#include <stack>static int p[][7] = { /* $ + - * % ( )*/ /*$ */ { 0,-1,-1,-1,-1,-1,-2}, /*+*/ { 1, 1, 1,-1,-1,-1, 1}, /*-*/ { 1, 1, 1,-1,-1,-1, 1}, /***/ { 1, 1, 1, 1, 1,-1, 1}, /*%*/ { 1, 1, 1, 1, 1,-1, 1}, /*(*/ {-2,-1,-1,-1,-1,-1, 0}, /*)*/ { 1, 1, 1, 1, 1,-2, 1}, /* 0: = */ /* 1: > */ /*-1: < */ /*-2: Error */ /*p[i][j]: i: top-stack, j = cur-opr*/};static std::stack<int> op;static std::stack<double> in;static char str[202]; void getOp(bool &retop, int &retnum, int &i){ while(str[i] == ' ' ) i++; if((i==0 && op.empty()) || str[i] == '\0' || str[i] == '\n') { //$ retop = true, retnum = 0; return; } if('0' <= str[i] && str[i] <='9' ){ //number retop = false; }else{ //operator retop = true; if(str[i] == '+') retnum = 1; if(str[i] == '-') retnum = 2; if(str[i] == '*') retnum = 3; if(str[i] == '/') retnum = 4; if(str[i] == '(') retnum = 5; if(str[i] == ')') retnum = 6; i++; return; } retnum = 0; for(;'0' <= str[i] && str[i] <='9'; ++i){ retnum *= 10; retnum += str[i] - '0'; } return;} int main(){ // freopen("1237.in","r",stdin); while( gets(str) && strcmp(str, "0") !=0 ){ while(!op.empty()) op.pop(); while(!in.empty()) in.pop(); int idx=0,retnum; bool retop, error= false; while(true){ getOp(retop, retnum, idx); if(retop == false){ in.push((double) retnum); }else{ if(op.empty() || p[op.top()][retnum] == -1){ op.push(retnum); }else if(p[op.top()][retnum] == 1){ double tmp; while(p[op.top()][retnum] == 1){ int opr = op.top(); op.pop(); double b = in.top(); in.pop(); double a = in.top(); in.pop(); if(opr == 1) tmp = a+b; else if(opr == 2) tmp = a-b; else if(opr == 3) tmp = a*b; else if(opr == 4) tmp = a/b; in.push(tmp); } // ( <- ) if(p[op.top()][retnum] == 0) op.pop(); else op.push(retnum); }else if(p[op.top()][retnum] == 0 ){ // $ <- $ op.pop(); }else{ error = true; break; } } if(op.size()== 0 && in.size() == 1 ) break; } if(error) printf("ERROR\n"); else{ printf("%.2f\n", in.top()); } } return 0;}
java:
import java.util.Scanner;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);ScriptEngineManager mgr = new ScriptEngineManager();ScriptEngine engine = mgr.getEngineByName("JavaScript");while(sc.hasNext()){String expr = sc.next();try {System.out.println(engine.eval(expr));} catch (ScriptException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
0 0
- 计算器--可以计算合理表达是的计算器,包括+-×/()
- 一个可以计算表达式的计算器
- 可以计算阶乘次方的大数计算器
- 51单片机波特率计算器(可以计算stc啊!)
- 用c语言编写的可以计算+-*/的计算器
- 计算器
- 计算器
- /* 计算器 */
- 计算器
- 计算器
- 计算器
- 计算器
- 计算器
- 计算器
- 计算器
- 计算器
- 计算器
- 计算器
- globus-stop-container授权问题
- iOS 播放不了android的amr文件
- BatteryStatsService电池电量统计服务源码分析
- 计算机编码
- mysql 用户管理和权限设置
- 计算器--可以计算合理表达是的计算器,包括+-×/()
- 【数据可视化之采集】如何设计一个前端监控系统(作者未完成)
- Dubbo 几个协议
- 几种编程语言的优缺点
- 马拦过河卒
- jquery pagination 分页插件 struts2后台
- 关于android6.0动态获取权限
- 嵌入式Linux-内核异常分析
- 关于状态栏的图标