解题报告 P2104 【二进制】
模拟大法好
模拟二进制的运算,
+从后向前找到第一个为0的,赋为1,中间为1的全赋为0
-从后向前找到第一个为1的,赋为0,中间为0的全赋为1
‘*’ 相当于<<操作 ++l,将二进制数长度加1,最后一位赋为0
‘/’ 相当于>>操作 --l,将二进制数长度减1
# pragma GCC optimize "O3"
#include<bits/stdc++.h>
using namespace std;
int n,m,k[5],l,tl;
char a[50000010];
void scz(char x) {
if(x=='-') {
int tp;
for(int j=l; j>=1; j--) {
if(a[j]=='1') {
tp=j;
break;
}
}
a[tp]='0';
for(int j=tp+1; j<=l; j++) a[j]='1';
} else if(x=='+') {
for(int i=l; i>=1; i--){
if(a[i]=='0') {
a[i]='1';
break;
}
else a[i]='0';
}
} else if(x=='*') {
a[++l]='0';
} else if(x=='/') {
if(l!=1) --l;
else a[l]='0';
}
}
void Print() {
for(int i=1; i<=l; i++) {
cout<<a[i];
}
cout<<"\n";
}
int main() {
cin>>n>>m;
l=n;
for(int i=1; i<=n; i++) cin>>a[i];
for(int i=1; i<=m; i++) {
char b;
cin>>b;
scz(b);
}
Print();
return 0;
}