一、题目
二、格式
三、样例
//输入:
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;
}
五、讲解视频
总结
本题目对于基础牢固的同学来讲十分简单,但是对于什么也不会类型的同学来说还是有点小难度的。
首先,题目中给了四种操作,分别是‘+’、‘-’、‘*’、‘/’
。
其中,'+'和'-'
操作直接就能看懂。但是'*'和'/'
操作是要求原二进制数乘以2,那么转换一下就是'*'
就是将二进制数左移
一位;而'/'
操作就是将二进制数右移
一位。
同时,这里采用了一种非常简便的方法来实现‘*’、‘/’
操作,如果是‘*’
的话,因为是左移一位,所以直接在字符串的最后面加上一个'0'
,然后为了确保万一,我们再在后面添加'\0'
来终止字符串。同理,‘/’
操作是右移一位,相比左移更加简单,直接把字符串最后一个字符给删了即可,这里还是使用'\0'
提前一位终止字符串来实现该操作。