一、题目
二、格式
三、样例
//输入:
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'
提前一位终止字符串来实现该操作。