C++题目:二进制键盘

二进制键盘

题目描述

時雨在制作一个键盘, 在这个极致简约的键盘上, 只有’0’, ‘1’ 和BackSpace三个键.
一开始编辑器画面上的字符串是空的, 按下键盘的按键后, 编辑器画面上字符串会发生如下变化:

‘0’键: 在字符串最右侧插入字符’0’.

‘1’键: 在字符串最右侧插入字符’1’.

BackSpace键: 如果字符串为空, 什么都不发生. 如果不为空, 则删除字符串最右侧的字符.

時雨用这个键盘进行了一些简单的测试, 她按下的按键顺序记录在一个数组中.
0, 1分别代表按下了0, 1键, 2代表按下了BackSpace键. 那么当時雨的测试完成后, 编辑器画面上的字符串是什么?

输入格式

输入共两行:

第一行,一个正整数 n n n,表示時雨按键的数量。

第二行, n n n个整数 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots, a_n a1,a2,,an,其中0,1代表時雨按下了0,1。2代表時雨按下了BackSpace。

输出格式

输出仅一行,表示编辑器最终显示的结果。

样例 #1

样例输入 #1

4
0 1 2 0

样例输出 #1

00

样例 #2

样例输入 #2

4
2 2 1 1

样例输出 #2

11

提示

对于 100 % 100\% 100%的数据, 1 ≤ n ≤ 100000 , 0 ≤ a i ≤ 2 1 \le n \le 100000, 0 \le a_i \le 2 1n100000,0ai2

答案

//数组,光标(正经做法)
#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a[100001],cur=1,n,x;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin >> x;
		if(x==0 or x==1){
			a[cur++]=x;
		}
		else{
			if(cur==1){
			}
			else{
				cur--;
			}
		}
	}
	for(int i=1;i<=cur-1;i++){
		cout << a[i];
	}
	return 0;
}
//字符串(不正经做法)
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,t;
    string s;
    cin >> n;
    for(int i=1;i<=n;i++){
    	cin >> t;
    	if(t==0)	s = s+"0";
		if(t==1)	s = s+"1";
		if(t==2){
			if(s.length()==0)	continue;
			else	s.erase(s.end()-1);
		}
	}
	cout << s << endl;
    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 当我们将一个double类型的数转换成二进制时,需要考虑到浮点数的表示方式以及二进制运算的规则。 首先,浮点数的表示方式采用了IEEE 754标准,它将一个双精度浮点数分为三个部分:符号位、指数位和尾数位。 符号位用于表示数的正负,1表示负数,0表示正数。 指数位用于表示数的指数部分,采用偏移码表示。在双精度浮点数中,指数占11位。 尾数位用于表示数的小数部分,采用补码表示。在双精度浮点数中,尾数占52位。 要将一个double类型的数转换成二进制,首先要确定符号位。如果数是正数,则符号位为0,如果数是负数,则符号位为1。接下来,要确定指数位和尾数位的值。 指数位的值等于数的指数加上一个偏移值(在双精度浮点数中为1023),然后转换成二进制。 尾数位的值等于数的小数部分转换成二进制。 最后,将符号位、指数位和尾数位组合在一起,就得到了该double数的二进制表示。 需要注意的是,由于尾数位有52位,而二进制只能精确表示有限个数的位数,所以转换成二进制后可能会有一定的误差。 总结起来,将一个double类型的数转换成二进制需要确定符号位、指数位和尾数位的值,并将它们组合在一起。 ### 回答2: 要将一个C语言中的double类型转换为二进制,可以使用union联合类型来进行操作。首先,我们需要定义一个double类型的变量,然后创建一个联合类型,其中包含一个double类型的成员变量和一个unsigned long long类型的成员变量。 接下来,将double类型的变量赋值给联合类型的double成员变量。然后,我们可以利用联合类型的unsigned long long成员变量来获取该double类型的二进制表示。 具体步骤如下: ```c #include <stdio.h> union DoubleToBinary { double d; unsigned long long ll; }; void printBinary(unsigned long long num) { for (int i = 63; i >= 0; i--) { printf("%d", (num >> i) & 1); } } int main() { double num = 3.14; union DoubleToBinary dtb; dtb.d = num; printf("二进制表示为:"); printBinary(dtb.ll); return 0; } ``` 在上述代码中,首先定义了一个DoubleToBinary的union类型,其中包含了一个double类型的成员变量d和一个unsigned long long类型的成员变量ll。 然后在main函数中,定义了一个double类型的变量num,并将其赋值为3.14。接着,将num赋值给dtb的d成员变量。 最后,调用printBinary函数,参数为dtb的ll成员变量,打印出该double类型的二进制表示。 运行以上代码,输出结果为:二进制表示为:010000000000100100011110101110000101000111101011100001010001 帮助 ### 回答3: 将double类型的数值转换为二进制需要进行以下步骤: 1. 首先,将double类型的数值转换为64位的二进制表示。这可以通过IEEE 754标准来完成,该标准规定了浮点数的二进制表示方法。 2. 取得这64个二进制位的最高位,这一位表示该double数值的符号位。0代表正数,1代表负数。 3. 将剩余的63位二进制位按位分组,其中11位表示指数位,剩下的52位表示尾数位。 4. 将指数位转换为10进制数值,通过指数位与尾数位的组合,可以确定double数值的大小。 5. 将尾数位中的每个二进制位转换为10进制数值,得到double数值的精度。 6. 将步骤2到5得到的数值组合在一起,即为该double数值的二进制表示。 需要注意的是,由于double类型的数值的精度较高,转换为二进制后可能会非常长。为了简化表示,通常只保留一定的位数。 总结起来,将double类型的数值转换为二进制需要进行IEEE 754标准的转换,并按照指数位和尾数位规定的位置来确定double数值的大小和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值