后缀表达式

来源:互联网 发布:linux dd命令安装系统 编辑:程序博客网 时间:2024/05/21 07:50

题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入格式:
输入:后缀表达式
输出格式:
输出:表达式的值

#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>using namespace std;int a[1001];int t1 = 0,la = 0;char c[1001],tmp[1001];int read_In() {    int a = 0;    bool minus = false;    char ch = getchar();    while (!(ch == '-' || (ch >= '0' && ch <= '9'))) ch = getchar();    if (ch == '-') {        minus = true;        ch = getchar();    }    while (ch >= '0' && ch <= '9') {        a = a * 10 + (ch - '0');        ch = getchar();    }    if (minus) a = -a;    return a;}void printOut(int x) {    char buffer[20];    int length = 0;    bool minus = x < 0;    if (minus) x = -x;    do {        buffer[length++] = x % 10 + '0';        x /= 10;    } while (x);    if (minus) buffer[length++] = '-';    do {        putchar(buffer[--length]);    } while (length);    putchar('\n');}void judge(char t) {    switch (t) {        case '+':            a[--la] = a[la] + a[la+1];            a[la+1] = 0;          //注意清零            return;        case '-':            a[--la] = a[la] - a[la+1];            a[la+1] = 0;            return;        case '*':            a[--la] = a[la] * a[la+1];            a[la+1] = 0;            return;        case '/':            a[--la] = a[la] / a[la+1];            a[la+1] = 0;            return;    }}int main() {    int lb = 0;    while(1) {        tmp[++t1] = getchar();        if(tmp[t1] == '@') {            t1--;            break;        }    }    for(int i = 1; i<=t1; i++) {        if(tmp[i] == '.') {            continue;        }        if(tmp[i] >= '0' && tmp[i] <= '9' && !(tmp[i-1] >= '0' && tmp[i-1] <= '9')) {            la++;        }        if(tmp[i] >= '0' && tmp[i] <= '9') {            a[la] *= 10;            a[la] += tmp[i] - '0';        }        if(tmp[i] == '/' || tmp[i] == '*' || tmp[i] == '+' || tmp[i] == '-') {            c[++lb] = tmp[i];            judge(c[lb]);        }    }    cout<<a[1];    return 0;}

注意一些细节问题,就这样吧,没什么说的,题目本身没有什么难度

原创粉丝点击