PTA 7-4 求前缀表达式的值 (25 分)

    xiaoxiao2022-07-02  165

    算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。

    输入格式:

    输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。

    输出格式:

    输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。

    输入样例:

    + + 2 * 3 - 7 4 / 8 4

    输出样例:

    13.0 #include<iostream> #include<cstring> #include<stack> #include<stdio.h> const int MAX = 31; using namespace std; int main() { char str[MAX]; cin.getline(str,MAX); int len = strlen(str); stack<double> st1; for(int i = len-1;i>=0;i--) { if(str[i] == ' ') { continue; } if(str[i]>='0'&&str[i]<='9') { double mul = 10,num = str[i] - '0'; for(i--;i>=0;i--) { //处理num为大于10的数 if(str[i]>='0'&&str[i]<='9') { num = num + (str[i]-'0')*mul; mul *= 10; } //num为小数 else if(str[i]=='.') { num /= mul; mul = 1; } //num为负数 else if(str[i]=='-') { num = -num; } else { break; } } st1.push(num); } else { double temp = st1.top(); st1.pop(); if(str[i] == '*') { temp *= st1.top(); st1.pop(); } else if(str[i] == '/') { if(st1.top() == 0) { cout << "ERROR"<<endl; return 0; } temp /= st1.top(); st1.pop(); } else if(str[i] == '+') { temp += st1.top(); st1.pop(); } else { temp -= st1.top(); st1.pop(); } st1.push(temp); } } printf("%.1lf",st1.top()); return 0; }

     

    最新回复(0)