算法学习之递归--表达式计算(简单计算器)
2017-09-12 19:12
267 查看
题目:
输入为四则运算表达式,仅由整数、+、-、*、/ 、(、) 组成,没有空格,要求求其值。假设运算符结果都是整数。"/"结果也是整数。
解题思想:
表达式的计算是个递归过程,如下图
递归解决代码如下:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int expression_value(); //一个表达式
int term_value(); //一个项
int factor_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;
else result /= value;
}
else break;
}
return result;
}
int factor_value(){ //求一个因子的值
int result = 0;
char c = cin.peek();
if( c == '(' ){ //括号'('包裹,当中是一个表达式
cin.get();
result = expression_value();
cin.get();
}
else{ //是一个数字,求出该数
while( isdigit(c) ){
result = result*10 + c - '0';
cin.get();
c = cin.peek();
}
}
return result;
}
输入为四则运算表达式,仅由整数、+、-、*、/ 、(、) 组成,没有空格,要求求其值。假设运算符结果都是整数。"/"结果也是整数。
解题思想:
表达式的计算是个递归过程,如下图
递归解决代码如下:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int expression_value(); //一个表达式
int term_value(); //一个项
int factor_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;
else result /= value;
}
else break;
}
return result;
}
int factor_value(){ //求一个因子的值
int result = 0;
char c = cin.peek();
if( c == '(' ){ //括号'('包裹,当中是一个表达式
cin.get();
result = expression_value();
cin.get();
}
else{ //是一个数字,求出该数
while( isdigit(c) ){
result = result*10 + c - '0';
cin.get();
c = cin.peek();
}
}
return result;
}
相关文章推荐
- 【数据结构与算法学习笔记】PART1:算法分析(计算,计算模型,大O记号,算法分析,迭代与递归,动态控制)
- 【算法学习笔记】86.栈 中缀表达式 SJTU OJ 1033 表达式计算
- 【从零学习经典算法系列】分治与递归1——递归表达式与解法初步
- 算法练习——表达式计算
- 我就给一个PHP逆波兰表达式的算法吧---工资计算专用
- 递归下降法实现计算表达式
- 蓝桥杯算法训练 表达式计算
- 预排序遍历树算法(非递归无限极分类算法)学习笔记
- 【算法导论】学习笔记第一章:算法在计算中的作用
- 表达式求值,中缀后缀转换,表达式递归直接求值等相关算法的实现
- C#数据结构和算法学习系列十----正则表达式
- PHP学习总结(4)——PHP入门篇之PHP计算表达式
- 算法训练 表达式计算
- 算法笔记_044:表达式计算求值(Java)
- 数据结构与算法学习笔记——二叉树遍历(一)(递归、迭代)
- 算法学习之旅,中级篇(5)-–递归之杨辉三角
- 算法学习之旅,中级篇(8)-–分治之二分搜索(递归)
- [算法学习]斐波那契数计算
- 算法设计和数据结构学习_6(单链表的递归逆序)
- 算法学习之递归和堆栈