一、题目

二、格式

三、样例
//输入:
4 10
1101
*/-*-*-/*/
//输出:
10110
注意:

四、代码实现
#include<bits/stdc++.h>
using namespace std;
const int N = 5e7 + 7;
int n, m;
char a[N], c;
int main() {cin>>n>>m>>a;while(m--) {cin >> c;switch(c){case '+': {for(int i = n-1; i >= 0; i--){if(a[i] == '0') {a[i] = '1';break;}else {a[i] = '0';}}break;}case '-': {for(int i = n-1; i >= 0; i--){if(a[i] == '1') {a[i] = '0';break;} else {a[i] = '1';}}break;}case '*': {a[n] = '0';a[++n] = '\0';break;}case '/': {a[--n] = '\0';break;}}} cout << a;return 0;
}
五、讲解视频
码题集oj赛(第八次)——MT2179 01操作
总结
本题目对于基础牢固的同学来讲十分简单,但是对于什么也不会类型的同学来说还是有点小难度的。
首先,题目中给了四种操作,分别是‘+’、‘-’、‘*’、‘/’。
其中,'+'和'-'操作直接就能看懂。但是'*'和'/'操作是要求原二进制数乘以2,那么转换一下就是'*'就是将二进制数左移一位;而'/'操作就是将二进制数右移一位。
同时,这里采用了一种非常简便的方法来实现‘*’、‘/’操作,如果是‘*’的话,因为是左移一位,所以直接在字符串的最后面加上一个'0',然后为了确保万一,我们再在后面添加'\0'来终止字符串。同理,‘/’操作是右移一位,相比左移更加简单,直接把字符串最后一个字符给删了即可,这里还是使用'\0'提前一位终止字符串来实现该操作。