#include <bits/stdc++.h>
#define ll long long
#define ull unsinged long long
#define il inline
#define rg register
using namespace std;
il ll read(){
ll X=0;bool flag=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') flag=0;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
X=(X<<1)+(X<<3)+ch-'0';
ch=getchar();
}
if(flag) return X;
return ~(X-1);
}
il void write(ll X){
if(X<0){
X=~(X-1);
putchar('-');
}
if(X>9) write(X/10);
putchar(X%10+'0');
}
char a[105],chr[105];
stack <char> s;
int num[105],cnt,tot;
il int getPriority(char ch) {
int level=0;
switch(ch){
case '(':
level=1;
break;
case '+':
case '-':
level=2;
break;
case '*':
case '/':
level=3;
break;
case '^':
level=4;
default:
break;
}
return level;
}
il void print(){
for(int i=0;i<cnt;i++){
if(chr[i]!=0) printf("%c ",chr[i]);
else printf("%d ",num[i]);
}
printf("\n");
}
il void del(int to){
for(int i=to;i<cnt;i++) num[i-1]=num[i+1];
for(int i=to;i<cnt;i++) chr[i-1]=chr[i+1];
cnt-=2;
}
int main(){
scanf("%s",&a);
for(int i=0;i<strlen(a);i++){
if(a[i]>='0'&&a[i]<='9') num[cnt++]=(int)a[i]-'0';
else{
if(a[i]==')'){
while(s.top()!='('){
chr[cnt++]=s.top();
s.pop();
}
s.pop();
}
else{
if(s.empty()) s.push(a[i]);
else{
if(a[i]=='(') s.push(a[i]);
else{
while(!s.empty()&&getPriority(s.top())>=getPriority(a[i])){
chr[cnt++]=s.top();
s.pop();
}
s.push(a[i]);
}
}
}
}
}
while(!s.empty()){
chr[cnt++]=s.top();
s.pop();
}
print();
while(cnt!=1){
tot++;
if(chr[tot]==0) continue;
else{
switch(chr[tot]){
case '+':
num[tot-2]=num[tot-2]+num[tot-1];
del(tot);
break;
case '-':
num[tot-2]=num[tot-2]-num[tot-1];
del(tot);
break;
case '*':
num[tot-2]=num[tot-2]*num[tot-1];
del(tot);
break;
case '/':
num[tot-2]=num[tot-2]/num[tot-1];
del(tot);
break;
case '^':
num[tot-2]=pow(num[tot-2],num[tot-1]);
del(tot);
break;
default:
break;
}
print();
tot=0;
}
}
system("pause");
return 0;
}
咋看也看不出来啊