P9857题解

· · 题解

题目超链接

首先让我们来了解一下三种表达式:

这道题是将前缀表达式转化为后缀表达式(逆波兰表达式)。我们通过观察可知,前缀表达式将运算符号提前,而后缀表达式将符号调后。那岂不是数字不变,只需要把符号放到最后输出就行了?那么我们可以分如下两种情况讨论:

  1. 如果输入的是数字,直接输出;
  2. 如果输入的是符号,先输出后面的两个数字(或表达式),再输出符号。

这样的话,这题就迎刃而解啦!

#include<bits/stdc++.h>
using namespace std;
void print(){
    char a[105];
    cin>>a;
    if(a[0]=='0')exit(0);//如果读到0,就直接终止程序 
    if(!(a[0]>'0'&&a[0]<='9')){
        print();//先输出后面的数字(或表达式) 
        print();//同上 
        cout<<a[0]<<' ';//再输出符号 
    }
    else cout<<a<<' ';//直接输出数字 
}
int main(){
    while(true){
        print();
        cout<<endl;//别忘记换行! 
    }
    return 0;//养成好习惯 
}