作业做完了,美术作业不想画,书也不想看,太无聊了,那就来写题解吧
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;
}