2018年蓝桥杯省赛 填空题 1.明码 知识点:进制问题

1.明码 - 蓝桥云课 (lanqiao.cn)

解析:201803明码_哔哩哔哩_bilibili

首先每行读入32个数字,我们分别用x和y各读入16个 ,表示字迹和底色。

我们需要做的就是把字迹的16个数字转为2进制,底色的16个数字转为2进制,然后2进制中的1用'1'来表示字迹,2进制中的0用' '来表示底色。合起来 组成汉字。

Tisps

+127的二进制是:0 1 1 1 1 1 1 1 (符号位为0不能改),也就是正数的八位二进制最大就是127

-1的二进制是: 1 0 0 0 0 0 0 1,取反+1变为:1 1 1 1 1 1 1 1

我们发现和127的二进制一样(除了符号位)

那么-1的二进制我们可以通过按位与上 127的每一位取判断有多少个1(不判断符号位),就相当于求-1的八位二进制有多少个1(因为二者除了符号位不一样外其他都一样)

2的二进制是: 1 0 0 0 0 0 1 0,取反+1之后是:1 1 1 1 1 1 1 0

126的二进制是:0 1 1 1 1 1 1 0

我们发现发现也可以用同样的方法 通过求126的八位二进制有多少个1去求出-2的八位二进制有多少个1.

总结,因此对于负数,我们可以通过 128+(负数)>>(1~30)&1==1的方式求出负数的二进制位。

code

js 复制代码
#include<bits/stdc++.h>
using namespace std;

void toBinaryStr(int i,string& ans)
{
    //正数部分
		if(i>0)
		{
		
			for(int j=0;j<7;j++)  //一个字节一个字节的进行转化 
			if(((i>>j)&1)==1) 
			{
				ans[8-j-1]='1'; //从高位到低位赋值 
			} 
		}
		//负数部分 
		else
		{
			 
			 for(int j=0;j<7;j++)
			 {
			 	if((((128+i)>>j)&1)==1)
			 	{
			 		ans[8-j-1]='1';
				 }
			 }
		}
} 
int main()
{
	
	for(int i=0;i<10;i++)  //一共10行 
	{
		for(int j=0;j<16;j++)  //每行32位,但是字迹和底色各占一半 ,所以字迹和背景各占16位 
		{
			int x,y;cin>>x>>y;
			string x1="        ",y2="        ";  //背景,每个占八位 
			
			//转换为二进制 
			toBinaryStr(x,x1);	
			toBinaryStr(y,y2);	
			
			cout<<x1+y2<<endl;
		}
		cout<<endl<<"================================================="<<endl;  //分割,方便清晰 
	}
	
        
        //求9的9次方
	long long ans=9;
	for(int i=0;i<9;i++)
	{
		ans*=9;
	}
	cout<<ans;
	return 0;
 } 
相关推荐
int型码农2 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT2 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面2 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked932 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,2 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
积极向上的向日葵2 小时前
有效的括号题解
数据结构·算法·
GIS小天2 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
_Itachi__3 小时前
LeetCode 热题 100 74. 搜索二维矩阵
算法·leetcode·矩阵
不忘不弃3 小时前
计算矩阵A和B的乘积
线性代数·算法·矩阵
不爱写代码的玉子3 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#