您的位置:首页 > 其它

表达式计算

2017-07-10 09:44 120 查看
//递归
/*表达式计算
输入为四则运算表达式,仅由数字,+ ,- ,* ,\ ,(、)组成,没有空格,要求求其值。
假设运算符结果都是整数。“/"结果也是整数 */
//输入(2+3)*(5+7)+9/3
//输出  63
#include<bits/stdc++.h>
#include<cstring>
#include<cstdlib>//  atof函数:将字符串类型的浮点数转化为double
using namespace std;
int factor_value( );//读入一个因子并返回其值
int  term_value( );//读入一项并返回其值
int expression_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;
result/=value;
}
else
break;
}
return result;
}
int factor_value()//求一个因子的值
{
int result =0;
char c=cin.peek();
if(c=='('){      //(290+34)
cin.get();
result=expression_value();
cin.get();
}
else{    //789
while(isdigit(c)){
result=10*result+c-'0';
cin.get();
c=cin.peek();
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: