蓝桥杯 输出二进制表示 C++算法提高 HERODING的蓝桥杯之路

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  输入[-128,127]内的整数,输出其二进制表示。提示,可使用按位与&
输入格式
  例:7
输出格式
  例:00000111
样例输入
一个满足题目要求的输入范例。
例:
7
样例输出
与上面的样例输入对应的输出。
例:
00000111
数据规模和约定
  输入数据中每一个数的范围。
  例:0<n,m<100, 0<=矩阵中的每个数<=1000。

解题思路:
这道题和普通的二进制的输出不同,这里的输入包括了负数,在计算机中,正数用原码表示,负数用补码表示,第一位都是判断用的,0表示正数,1表示负数,那么正数的话就是正常二进制计算,负数的话就是取反加一,代码如下:

#include<bits/stdc++.h>

using namespace std;

void qufan(char a[8])//取反 
{
	for(int i = 0;i < 7;i ++)
	{
		if(a[i] == '0')
			a[i] = '1';
		else
			a[i] = '0';
	}
}

void jiayi(char a[8])//
{

	int x = a[0] - '0';
	x = x + 1;
	a[0] = x + '0';
	if(x == 1)
		return ;
	int i = 0;
	while(x == 2 && i < 7)
	{
		a[i] = '0';
		x = a[ ++i] - '0';
		x += 1;
	}
	a[i] = '1';
}


int main()
{
	char a[8];
	int i = 0, m, n;
	for( i = 0; i < 8; i++)//赋初值 
		a[i] = '0';
	cin >> m;
	n = m;
	m = abs(m);
	i = 0;
	while(m)
	{
		int n = m % 2;
		a[i ++] = n + '0';
		m /= 2;
	}
	a[7] = '0';//范围限定,最后一位肯定是0 
	if(n < 0)//如果是负数 
	{
		a[7] = '1';//此时最后一位是0,判断符号用的 
		qufan(a);	
		jiayi(a); 
	} 
	for(int i = 7;i >= 0;i --)
			cout << a[i];
	return 0; 
}

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/106938482