照著優先順序做事就好 做完的就把運算元清掉
然後把運算子的地方換成答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<bits/stdc++.h> using namespace std; int main(){ string s; while(cin>>s && s[0]!='E'){ bool nt=0; for(int i=0;i<(int)s.length();i++){ if(s[i]=='!'){ nt=!nt; s[i]=' '; } if(s[i]=='0' && nt){ s[i]='1'; nt=0; } if(s[i]=='1' && nt){ s[i]='0'; nt=0; } } // cout<<"not processed:"<<s<<"--\n"; for(int i=0;i<(int)s.length();i++){ if(s[i]=='*'){ int j,k; for(j=i;j>=0 && s[j]!='1' && s[j]!='0';j--){} for(k=i;k<(int)s.length() && s[k]!='1' && s[k]!='0';k++){} int jj=s[j]-'0'; int kk=s[k]-'0'; int res=jj&kk; // cout<<"process and with jj="<<jj<<" and kk="<<kk<<". res="<<res<<endl; s[i]=res+'0'; s[j]=' '; s[k]=' '; } } // cout<<"and processed:"<<s<<"--\n"; for(int i=0;i<(int)s.length();i++){ if(s[i]=='+'){ int j,k; for(j=i;j>=0 && s[j]!='1' && s[j]!='0';j--){} for(k=i;k<(int)s.length() && s[k]!='1' && s[k]!='0';k++){} int jj=s[j]-'0'; int kk=s[k]-'0'; int res=jj|kk; s[i]=res+'0'; s[j]=' '; s[k]=' '; } } // cout<<"all processed:"<<s<<"--\n"; for(int i=0;i<(int)s.length();i++){ if(s[i]=='1' || s[i]=='0'){ cout<<s[i]<<'\n'; } } } } |
沒有留言:
張貼留言