蓝桥杯试题 算法提高 输出二进制表示

试题 算法提高 输出二进制表示

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

思路:首先考虑正负数的转化;正数直接除以2,取余依次存储在定义的数组中输出就可以了;而负数的话则要考虑符号,负数的值可以在正数的基础上取反在加1即为负数的二进制数值,比如7的值为00000111(主要最高位为符号位,正数为零,负数为一),取反为11111000,再加1为11111001,这个可能比较复杂了一点,所以我想到了一个更好的方法,发现负数加128,就是其本身的值,省去了转化,再将符号位变为一即可。

代码如下:

#include<stdio.h>
int main(){
	int a[10];
	int i,j=0,k;
	for(i=0;i<8;i++){
		a[i]=0;
	}
	scanf("%d",&k);
	if(k>=0 && k<=127){
	while(k>0){
		a[j++]=k%2;
		k/=2;
	}
	for(j=i-1;j>=0;j--){
		printf("%d",a[j]);
	}
	}
	if(k<=-1 && k>=-128){
		k+=128;
		while(k>0){
		    a[j++]=k%2;
		    k/=2;
		}
		a[i-1]=1;
		for(j=i-1;j>=0;j--){
			printf("%d",a[j]);
		}
	}
	return 0;
}
发布了26 篇原创文章 · 获赞 25 · 访问量 659

猜你喜欢

转载自blog.csdn.net/weixin_45269353/article/details/104459060