计算表达式的值——递归(2)

发布于 2018-11-01  378 次阅读


样例输入:

(1+2)*3

样例输出:

9
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;

int factor_value();//读入一个因子并返回值
int term_value();//读入一项并返回值
int expression_value();//读取一个表达式

int factor_value(){//求一个因子的值
    int 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();
        }
    }
    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;
            else
                result /= value;
        }
        else
            break;
    }
    return result;
}

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 main()
{
    cout<<expression_value()<<endl;
    return 0;
}

 


像烟花也是过一生,像樱花也是一生,只要亮过和盛开不就好了么?