标签:get double 四则运算 cin value result 求值 表达式 op
03 四则运算表达式求值
输入
输入为四则运算表达式,仅由数组、四则运算符、左右括号组成,不含空格。
假设运算符结果都是整数。
输出
输出这个表达式的值
分析
-
首先我们要搞清楚表达式的定义是什么:
- 表达式:由一个或者多个项组成,多个项的表达式由
+ -
连接 - 项:由一个或者多个因子组成,多个因子由
* \
连接 - 因子:由
(表达式)
或者整数
组成
我们发现,这是一个递归定义的东西,自然我们也可以用递归函数来解决问题
- 表达式:由一个或者多个项组成,多个项的表达式由
代码实现
#include<iostream>
#include<cmath>
using namespace std;
double expression_value();
double term_value();
double factor_value();
double expression_value()
{
double result = term_value();
bool more = true;
while (more)
{
char op = cin.peek();
switch (op)
{
case'+':
cin.get();
result += term_value();
break;
case'-':
cin.get();
result -= term_value();
break;
default:
more = false;
break;
}
}
return result;
}
double term_value()
{
double result = factor_value();
bool more = true;
while (more)
{
char op = cin.peek();
switch (op)
{
case'*':
cin.get();
result *= factor_value();
break;
case'/':
cin.get();
result /= factor_value();
break;
default:
more = false;
break;
}
}
return result;
}
double factor_value()
{
double result = 0;
char op = cin.peek();
if (isdigit(op))
{
string nums;
while (isalnum(op) || op == '.')
{
nums += op;
cin.get();
op = cin.peek();
}
result = atof(nums.c_str());
}
else
{
cin.get();
result = expression_value();
cin.get();
}
return result;
}
int main()
{
printf("%.2lf", expression_value());
}
事实上本题还可以用栈的方法来解决,效率更高
Chen#123 发布了21 篇原创文章 · 获赞 1 · 访问量 247 私信 关注标签:get,double,四则运算,cin,value,result,求值,表达式,op 来源: https://blog.csdn.net/weixin_44351043/article/details/104442531
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。