4132:四则运算表达式求值
总时间限制: 1000ms 内存限制: 65536kB 描述 求一个可以带括号的小学算术四则运算表达式的值
输入 一行,一个四则运算表达式。’‘表示乘法,’/'表示除法 输出 一行,该表达式的值,保留小数点后面两位 样例输入 输入样例1: 3.4 输入样例2: 7+8.3 输入样例3: 3+4.5(7+2)(3)((3+4)(2+3.5)/(4+5))-34(7-(2+3)) 样例输出 输出样例1: 3.40 输出样例2: 15.30 输出样例3: 454.75
来源 Guo Wei
问题链接:Bailian4132 四则运算表达式求值 问题简述:(略) 问题分析:(略) 程序说明:(略) 参考链接:(略) 题记:用C++处理表达式的范例
AC的C++语言程序如下:
#include <bits/stdc++.h>
using namespace std;
double expression();
double factor()
{
double result = 0;
char op = cin.peek();
if ( op == '(') {
cin.get();
result = expression();
cin.get();
} else {
bool dotflag = false;
double pright = 10;
while ( isdigit(op) || op == '.') {
if (op == '.') {
pright = 1;
dotflag = true;
cin.get();
op = cin.peek();
} else {
if (dotflag) {
pright *= 0.1;
result += pright * (op - '0');
cin.get();
op = cin.peek();
} else {
result = result * pright + op - '0';
cin.get();
op = cin.peek();
}
}
}
}
return result;
}
double item()
{
double result = factor();
for (;;) {
char op = cin.peek();
if ( op == '*' || op == '/') {
cin.get();
double value = factor();
if ( op == '*')
result *= value;
else
result /= value;
} else
break;
}
return result;
}
double expression()
{
double result = item();
for(;;) {
char op = cin.peek();
if ( op == '+' || op == '-') {
cin.get();
double value = item();
if( op == '+')
result += value;
else
result -= value;
} else
break;
}
return result;
}
int main()
{
printf("%.2f", expression());
return 0;
}
|