表达式计算
2017-07-10 09:44
120 查看
//递归 /*表达式计算 输入为四则运算表达式,仅由数字,+ ,- ,* ,\ ,(、)组成,没有空格,要求求其值。 假设运算符结果都是整数。“/"结果也是整数 */ //输入(2+3)*(5+7)+9/3 //输出 63 #include<bits/stdc++.h> #include<cstring> #include<cstdlib>// atof函数:将字符串类型的浮点数转化为double using namespace std; int factor_value( );//读入一个因子并返回其值 int term_value( );//读入一项并返回其值 int expression_value( );//读入一个表达式并返回其值 int main(){ cout<<expression_value()<<endl; return 0; } int expression_value(){ int result=term_value();//求第一项的值 bool more =true; while(more){ char op=cin.peek();//看一个字符,不取走 if(op=='+'||op=='-'){ cin.get();//从输入中取走一个字符 int value=term_value(); if(op=='+') result+=value; else result -=value; } else more =false; } return result; } int term_value()//求一个项的值 { int result =factor_value();//求第一个因子的值 while(true) {//是否有更多的因子 char op=cin.peek(); if(op=='*'||op=='/'){ cin.get(); int value=factor_value(); if(op=='*') result*=value; result/=value; } else break; } return result; } int factor_value()//求一个因子的值 { int result =0; char c=cin.peek(); if(c=='('){ //(290+34) cin.get(); result=expression_value(); cin.get(); } else{ //789 while(isdigit(c)){ result=10*result+c-'0'; cin.get(); c=cin.peek(); } } return result; }
相关文章推荐
- 表达式计算-Python版
- 算法训练 表达式计算
- C#.NET 动态计算表达式值
- 中缀表达式转化为后缀表达式,并计算结果
- 表达式的计算
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
- <队内胡策> 2017.10.24 求逆序对+表达式计算+贪心+Bfs+最短路、exgcd
- 压栈思想计算Java运算表达式
- [0613]Tyvj P1040-P1042 表达式的计算1-3
- 练习3.19 计算后缀表达式的值
- 利用栈计算算数表达式的值
- 将文件中的表达式读出来计算,并把结果连同表达式写入另一个文件
- 表达式计算算法总结
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 蓝桥杯 算法训练:表达式计算 中缀表达式变后缀表达式
- Oracle数据库中计算时间差的常用表达式
- 实际工作中遇到的技术难题与大家交流(工作流条件表达式计算部分),希望技术高手能给于指点
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值”的解决方法
- 通过前缀表达式计算中缀表达式