为什么第二个样例的最后一个输出是1啊? 我的代码的计算步骤:
0 ! 1 0 | 1 0 ! & & ! &
!0=1---
0|1=1---
!0=1---
1&1=1---
1&1=1---
!1=0---
0&1=0---
0
代码:
#include<bits/stdc++.h>
using namespace std;
int n, m, p, q;
char w;
string s;
stack<int> a;
char b[1000008];
string ss;
int main() {
getline(cin, s);
int siz=s.size();
for (int i = 0; i < siz;i++) {
if (s[i] == ' ') continue;
if (s[i] == '!' || s[i] == '&' || s[i] == '|') {
b[++n] = s[i];
} else {
int j=0;
while(s[j++]!=' '){
}
i+=j-1;
b[++n] = '+';
}
}
for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}cout<<endl;
cin >> p;
for (int i = 1; i <= p; i++) {
char o;
cin >> o;
for (int i = 1; i <= n; i++) {
if (b[i] == '+') {
b[i] = o;
break;
}
}
}
for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}cout<<endl;
cin >> q;
for (int i = 1; i <= q; i++) {
int v,u;
cin>>v;
int num=0;
for(int i=0;i<n;i++){
if(b[i]=='0'||b[i]=='1'){
num++;
}
if(num==v){
if(b[i]=='0') b[i]='1';
else b[i]='0';
u=i;
break;
}
}
for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}
cout<<endl;
for (int i = 1; i <= n; i++) {
if (b[i] == '0' || b[i] == '1') {
a.push(b[i] - '0');
} else {
if (b[i] == '!') {
bool t = a.top();
a.pop();
a.push(!t);cout<<'!'<<t<<"="<<!(t)<<"---"<<endl;
} else if (b[i] == '&') {
bool t1 = a.top();
a.pop();
bool t2 = a.top();
a.pop();
a.push(t1 && t2);cout<<t1<<"&"<<t2<<"="<<(t1 && t2)<<"---"<<endl;
} else if (b[i] == '|') {
bool t1 = a.top();
a.pop();
bool t2 = a.top();
a.pop();
a.push(t1 || t2);
cout<<t1<<"|"<<t2<<"="<<(t1 || t2)<<"---"<<endl;
}
}
}
cout << a.top() << endl;
if(b[i]=='0') b[u]='1';
else b[u]='0';
}
return 0;
}