试题 算法提高 输出二进制表示
资源限制
时间限制: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;
}