信息学奥赛一本通-编程启蒙3271:练44.3 二进制串

作业做完了,美术作业不想画,书也不想看,太无聊了,那就来写题解吧

3271:练44.3 二进制串

时间限制: 1000 ms 内存限制: 65536 KB

提交数: 1166 通过数: 705

【题目描述】

大家都知道,数据在计算机里面是以二进制的形式存储的。

有一个同学他学习了二进制转换之后,他想自己实际操作一下。现在有一个非负整数 xx,他想将其转换为二进制,你能帮解决吗?

【输入】

输入的第一行包含一个整数 tt(2≤t≤10002≤t≤1000)。

接下来tt行,每一行有一个数字 xx(1≤x≤1081≤x≤108),是非负整数。

【输出】

tt 行每行一个二进制串,即每个 xx 对应的二进制数。(不要有前导零)

【输入样例】

复制代码
4
1
2
3
4

【输出样例】

复制代码
1
10
11
100

思路:

首(sou)先(sian),我们把问题简化一下,先学会将一个十进制数转化为二进制数

有这样一种方法,大家都这么用,他就是短除法

首先,我们拿出要转换的十进制数(这里以6为例子)

算出6%2=0(也就是右边的......0)

然后把6/2=3,,继续计算3

3%2=1(右边的......1),然后3/2=1

计算1, 1%2=1,1/2=0,计算结束

然后我们把余数倒过来(计算出余数的顺序为0 1 1,实际上的二进制数为1 1 0)

知道了这个,我们只需要塞一个循环进程序,我们就能算出一个数的二进制数了

cpp 复制代码
void f(long long a){
	string s;
	while(a!=0){
		s+=char(a%2+48);
		a/=2;
	}
	int jl=0;
	for(int i=s.size()-1;i>=0;i--){
		if(jl==0&&s[i]=='0'){
			continue;
		}else if(s[i]!='0'){
			jl=1;
		}
		cout<<s[i];
	}
	return ;
}

具体长这样↑↑↑

聪明的你发现了,写出了计算一个数二进制的代码,我们把这段代码写成函数,用起来就很方便了

这里你可能不懂string是什么,简单介绍一下,就是字符串,s刚刚定义出来,s里面什么都没有,

s+='0',这样s='0'

s再+='1'这样s='01'

字符串也能和数组一样访问

如果你看不惯字符串,你也可以用数组

现在,我们只需要读入多个数,然后使用这个函数就能解决这个问题


代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
void f(long long a){
	string s;
	while(a!=0){
		s+=char(a%2+48);
		a/=2;
	}
	int jl=0;
	for(int i=s.size()-1;i>=0;i--){
		if(jl==0&&s[i]=='0'){
			continue;
		}else if(s[i]!='0'){
			jl=1;
		}
		cout<<s[i];
	}
	return ;
}
int main(){
	long long t;
	cin>>t;
	long long aa;
	for(int i=1;i<=t;i++){
		cin>>aa;
		f(aa);
		cout<<"\n";
	}
	return 0;
} 
相关推荐
RuoZoe9 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
鱼子星_11 小时前
【C++】继承和多态(上)
c++·笔记
郝学胜-神的一滴12 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
码匠许师傅12 小时前
【设计模式精讲】22.中介者模式(Mediator)
c++·设计模式·软件工程·uml·中介者模式
爱吃巧克力的程序媛15 小时前
main.cpp注册 C++ 类到 QML 元对象系统
c++·qt
YYYing.15 小时前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
键盘会跳舞16 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
HugoStudio_SWAN17 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
jimy117 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
励志不掉头发的内向程序员19 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互