码题集oj赛(第八次)——MT2179 01操作

一、题目

在这里插入图片描述

二、格式

在这里插入图片描述

三、样例

//输入:
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'提前一位终止字符串来实现该操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心无旁骛~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值