练习题(三)(bitset十进制转二进制)

练习题(三)

时间限制: 1 Sec 内存限制: 128 MB
[命题人:171360140]
题目描述
李华上大学报的是物联网专业,在老师介绍完专业后,让同学们学习进制转换,刚开始李华并不会进制转换,他就从最简单的2进制开始学习。下面给你一个10进制的整数,让你求出他的2进制数是多少?
十进制---->二进制
0 ----> 0
1 ----> 1
2 ----> 10
3 ----> 11
输入
第一行输入一个整数n(0<n<100)
下面有n行,每行有一个十进制整数x (-65536<x<65536)
输出
输出有n行
每行对应的是转换后的二进制数
样例输入

4
0
1
2
3

样例输出

0
1
10
11

来源/分类
寒假练习赛
题目网址: http://47.112.31.182/problem.php?id=1067
题意:
本题就是让求十进制变为二进制,要注意的就是负数问题
思路:
对于正整数直接对2取余取商就行了。
当为负数时(比如十进制的-1):

  1. 先把负数去掉,然后对对2取余取商((十进制1=二进制0000000000000001)
  2. 取反:0变1,1变0(变成1111111111111110)
  3. 加一:最后一位加1,大于等于2向前进一(1111111111111111)
  4. 十进制的(-1)=二进制(1111111111111111)

16位的也可以用(65536+x)%65536然后再对这个数进行二进制的转换(65535=2的16次方)
本题用bitset更为简便,不过要注意的是为0的情况
bitset里面的方法
在这里插入图片描述
代码:

#include <iostream>
#include <string>   //string容器的头文件
using namespace std;
int main()
{
    string s;   //创建
    int n,x;
    cin>>n; //n组数据
    for(int i=0;i<n;i++)
    {
        s="";   //令s为空
        cin>>x; //十进制数x
        if(x==0)    //x为0时
        {
            s='0';
            cout<<s<<endl;
        }
        else
        {
            x=(x+65536)%65536;  //x+65536再对65536取余
            while(x)
            {
                if(x%2==1)  //对2取余为1
                    s='1'+s;    //把1加到s前面
                else    //余数为0
                    s='0'+s;    //把0加到s前面
                x=x/2;  //对2取商
            }
            cout<<s<<endl;  //输出二进制数(string型s)
        }
    }
    return 0;
}

bitset代码

#include <bitset>
#include <algorithm>
using namespace std;
int main()
{
    int x,n;
    bitset<16> a;
    cin>>n;
    while(n--)
    {
        cin>>x;
        a=x;//把十进制的x以二进制存进a中
        if(a.any()==0)  //判断是否存在1
            cout<<"0"<<endl;
        for(int j=15;j>=0;j--)  //倒序输出
        {
            if(a[j]!=0) //去前导0
            {
                for(int i=j;i>=0;i--)
                {
                    cout<<a[i];
                }
                cout<<endl;
                break;
            }
        }
    }
    return 0;
}

运行结果:
在这里插入图片描述
总结:
进制的转换找到了规律就好算多了,不过基础的运算还是要记住的。
用bitset求二进制更为简便,不过要注意为0的情况

猜你喜欢

转载自blog.csdn.net/qq_41657977/article/details/86701496