十进制转二进制 自己打的不行求帮助
题目描述输入一个十进制数N(32位整数),将它转换成二进制数输出.
输入
输入数据包含多个测试实例,每个测试实例包含1个整数N(32位整数)。
输出
输出转换后的数,每个输出占1行。
样例输入 Copy
55
-23
42
-2
样例输出 Copy
110111
-10111
101010
-10
#include<stdio.h>
#include<math.h>
int main()
{
int n,b,a,i,k;
while(1)
{
i=0;
scanf("%d",&n);
for(b=abs(n);b>0;b=b/2)
{
a=b%2;
i++;
}
k=i;
if(n<0)
{printf("-");
}
for(i=k-1;i>=0;i--)
{printf("%d",a);
}
printf("\n");
}
return 0;
} 基本没问题,但是这个二进制一般是有个符号位的吧,0代表证书,1代表负数。1001就代表-1。 感觉这种二进制负数的表达方式不太好啊,好像一般都是用符号位表示的。 本帖最后由 jackz007 于 2022-3-24 21:41 编辑
#include <stdio.h>
int main(void)
{
char c , s ;
int d , e , i , j , k , m , n ;
for(m = 0 ;; m ++) {
gets(s) ;
if(s) sscanf(s , "%d" , & d) ;
else break ;
}
for(i = 0 ; i < m ; i ++) {
if(d >= 0) e = 1 ;
else e = -1 ;
for(n = 0 , k = d * e ; k ; k /= 2) s = '0' + (k % 2);
if(e < 0) s = '-' ;
s = '\0' ;
for(j = 0 ; j < n / 2 ; j ++) {
c = s ;
s = s ;
s = c ;
}
printf("%s\n" , s) ;
}
}
编译、运行实况
D:\\C>g++ -o x x.c
D:\\C>x
55
-23
42
-2
110111
-10111
101010
-10
D:\\C>
页:
[1]