rt,第二个样例没过,直接
A了
#include<bits/stdc++.h>
using namespace std;
string ss;
int you(char ch){
if(ch=='('||ch==')'){
return -1;
}
else if(ch=='+'||ch=='-'){
return 1;
}
else if(ch=='*'||ch=='/'){
return 2;
}
else if(ch=='^'){
return 3;
}
else{
return -1;
}
}
vector<string> ys;
string change1(int i){
stringstream sas;
string sss;
sas<<i;
sas>>sss;
return sss;
}
int change2(string i){
stringstream sas;
int sss;
sas<<i;
sas>>sss;
return sss;
}
void print(){
int len=ys.size();
for(int i=0;i<len;i++){
cout<<ys[i]<<" ";
}
printf("\n");
return ;
}
int main(){
int len,lengh=0;
cin>>ss;
len=ss.size();
stack<char> num;
stack<char> dat;
for(int i=0;i<len;i++){
if(ss[i]>='0'&&ss[i]<='9'){
num.push(ss[i]);
lengh++;
}
else if(ss[i]==')'){
char to;
to=dat.top();
while(to!='('){
num.push(to);
dat.pop();
to=dat.top();
}
dat.pop();
}
else if(ss[i]=='('){
dat.push(ss[i]);
}
else{
if(!dat.empty()){
while(you(dat.top())>=you(ss[i])){
//cout<<dat.top()<<" "<<dat.empty()<<"\n";
if(dat.top()=='^'&&ss[i]=='^'){
break;
}
num.push(dat.top());
dat.pop();
if(dat.empty()){
break;
}
}
//printf("aa\n");
}
dat.push(ss[i]);
}
}
while(!dat.empty()){
num.push(dat.top());
dat.pop();
}
string ss;
while(!num.empty()){
ss="";
//cout<<num.top()<<" ";
ss+=num.top();
ys.push_back(ss);
//s+=" ";
num.pop();
}
len=ys.size();
for(int i=0;i<len/2;i++){
swap(ys[i],ys[len-i-1]);
}
/*
ys.insert(ys.begin()+1,"aa");
*/
print();
int now;
for(int i=0;i<lengh;i++){
if(ys[i]=="+"||ys[i]=="-"||ys[i]=="*"||ys[i]=="/"||ys[i]=="^"){
now=i-1;
break;
}
//printf("aanow=%d\n",i);
}
//printf("aanow=%d\n",now);
for(int i=1;i<lengh;i++){
if(ys[now+1]=="+"){
ys[now-1]=change1(change2(ys[now-1])+change2(ys[now]));
ys.erase(ys.begin()+now);
ys.erase(ys.begin()+now);
}
else if(ys[now+1]=="-"){
ys[now-1]=change1(change2(ys[now-1])-change2(ys[now]));
ys.erase(ys.begin()+now);
ys.erase(ys.begin()+now);
}
else if(ys[now+1]=="*"){
ys[now-1]=change1(change2(ys[now-1])*change2(ys[now]));
ys.erase(ys.begin()+now);
ys.erase(ys.begin()+now);
}
else if(ys[now+1]=="/"){
ys[now-1]=change1(change2(ys[now-1])/change2(ys[now]));
//cout<<ys[now-1]<<endl;
ys.erase(ys.begin()+now);
ys.erase(ys.begin()+now);
}
else if(ys[now+1]=="^"){
//cout<<ys[now-1]<<endl;
ys[now-1]=change1(pow(change2(ys[now-1]),change2(ys[now])));
ys.erase(ys.begin()+now);
ys.erase(ys.begin()+now);
}
else{
print();
continue;
}
for(int i=0;i<lengh;i++){
if(ys[i]=="+"||ys[i]=="-"||ys[i]=="*"||ys[i]=="/"||ys[i]=="^"){
now=i-1;
break;
}
}
// printf("now=%d\n",now);
print();
}
return 0;
}