表达式计算

来源:互联网 发布:如何判断域名被劫持 编辑:程序博客网 时间:2024/06/08 04:43
//递归/*表达式计算 输入为四则运算表达式,仅由数字,+ ,- ,* ,\ ,(、)组成,没有空格,要求求其值。 假设运算符结果都是整数。“/"结果也是整数 */ //输入(2+3)*(5+7)+9/3 //输出  63 #include<bits/stdc++.h> #include<cstring> #include<cstdlib>//  atof函数:将字符串类型的浮点数转化为doubleusing 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;}

原创粉丝点击