原题:
解析:本题时一道数位制的题目,因为不考虑最高位的进退位,相对来说比较简单易懂。我们可以考虑把这个二进制数每一位进行相应的操作
1、+1:从最低位开始+1,发现如果原来的数字是1的话,则+1后就变成0,即1变成0,0变成1.
2、-1:-1亦是如此,1变成0,0变成1.
3、*2:通过观察,二级制数字*2后,相当于整个二进制数左移
4、/2:二进制数字/2,相当于整个二进制数右移
具体代码实现如下:
#include<iostream>
using namespace std;
const int N = 1e7 + 10;
char val[N], buf;
int main() {
int n, m;
cin >> n >> m >> val;
for (int i = 0; i < m; i++) {
cin >> buf;
switch (buf) {
case'+': {
for (int j = n - 1; j >= 0; j--) {
if (val[j] == '0') {
val[j] = '1';
break;
}
else
val[j] = '0';
}
break;
}
case'-': {
for (int j = n - 1; j >= 0; j--) {
if (val[j] == '1') {
val[j] = '0';
break;
}
else
val[j] = '1';
}
break;
}
case'*': {
val[n] = '0';
val[++n] = '\0'; //终止字符串
break;
}
case'/': {
val[--n] = '\0';
break;
}
}
}
cout << val;
return 0;
}
本篛狗的第一篇博客,肯定会有很多错误,可以一起交流,一起学习!