P9857题解
Hulless_barley · · 题解
题目超链接
首先让我们来了解一下三种表达式:
- 中缀表达式
1+2 ; - 前缀表达式
+\ 1\ 2 ; - 后缀表达式
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;//养成好习惯
}