您的位置:首页 > 其它

递归方法求四则运算表达式的值

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: