递归方法求四则运算表达式的值
2018-04-09 09:14
162 查看
表达式本身就是一个递归嵌套的概念
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <string>
#include <stack>
#include <algorithm>
#include <math.h>
#include <iomanip>
using namespace std;
double expression_value();//求一个表达式的值
double term_value();//求一个项的值
double factor_value();//求一个因子的值
double expression_value()
{
double result=term_value();
while(1)
{
char op=cin.peek();//查看输入流中的第一个元素,但不取走
if(op=='+'||op=='-')
{
cin.get();
double value=term_value();
if(op=='+')
result+=value;
else
result-=value;
}
else
break;
}
return result;
}
double term_value()
{
double result = factor_value();
while(1)
{
char c=cin.peek();
if(c=='*'||c=='/')
{
cin.get();
double value = factor_value();
if(c=='*')
result*=value;
else
result/=value;
}
else
break;
}
return result;
}
double factor_value()
{
double result=0;
char c=cin.peek();
if(c=='(')
{
cin.get();
result = expression_value();
cin.get();
}
else//因子本身是一个数字(整个递归的出口)
{
while(isdigit(c))//处理整数部分
{
result = 10*result+c-'0';
cin.get();
c = cin.peek();
}
if(c=='.')//处理小数部分
{
cin.get();
c = cin.peek();
double t=0.1;
while(isdigit(c))
{
result += (c-'0')*t;
t*=0.1;
cin.get();
c = cin.peek();
}
}
}
return result;
}
int main()
{
cout<<fixed<<setprecision(2)<<expression_value()<<endl;
return 0;
}
相关文章推荐
- 栈的应用--递归与四则运算表达式求值
- 049day(构造和析构函数的调用时机,递归例题(四则运算表达式求值)的学习)
- 一个计算四则运算表达式文本的方法
- 字符串四则运算表达式的求解(中缀表达式实现,模拟笔算的方法)
- C语言实现整数四则运算表达式的计算
- 四则运算表达式求值(栈的应用)
- Java实现四则运算表达式计算
- javascript中解析四则运算表达式的算法和示例
- inux shell 实现 四则运算(整数及浮点) 简单方法
- linux shell 实现 四则运算(整数及浮点) 简单方法
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
- 输入四则运算的表达式,求解结果算法
- 四则运算表达式求值(栈的应用)
- 四则运算表达式二叉树法求后缀表达式
- 正则表达式:.Net Framework平衡组/递归匹配搜索源码中的函数/方法({}匹配)
- 栈的应用---四则运算表达式求值
- 关于四则运算表达式生成和答案校验的笔记
- 【分治】快速幂运算-递归与非递归方法
- C#数学表达式计算(中缀转换后缀)数据结构 括号 四则运算 幂运算 取模 三角函数
- 四则运算表达式实现