题目1473:二进制数
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:1863
解决:467
- 题目描述:
-
大家都知道,数据在计算机里中存储是以二进制的形式存储的。
有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。
你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。
- 输入:
-
第一行,一个数字T(T<=1000),表示下面要求的数字的个数。
接下来有T行,每行有一个数字n(0<=n<=10^8),表示要求的二进制串。
- 输出:
-
输出共T行。每行输出求得的二进制串。
- 样例输入:
-
5 23 535 2624 56275 989835
- 样例输出:
-
10111 1000010111 101001000000 1101101111010011 11110001101010001011
- 来源:
- 2012年北京邮电大学计算机研究生机试真题
- AC代码,供批判
-
#include <stdio.h> #include <math.h> int main() { int t,k; scanf("%d", &t); int num[t]; for(k=0;k<t;k++) { scanf("%d",&num[k]); } for(k = 0; t>0; --t) { int a[40]; int i = 0, sum = 0; int j; if(!num[k]) { printf("%d\n", 0); k++; continue; } while(num[k]/2 != 1) { a[i++] = num[k] % 2; num[k] /= 2; } a[i++] = num[k] % 2; a[i]=1; for(j=i; j>=0; --j) { printf("%d", a[j]); } putchar('\n'); ++k; } return 0; }
The C Programming Language读到一半,意识到之前这个程序写得是冗长而丑陋,改了一个简洁的版本,用到递归和位运算。
12345678910111213141516171819202122232425262728293031323334353637#include <stdio.h>
void
toBin(unsigned n)
{
if
( !n )
return
;
else
{
toBin(n>>1);
printf
(
"%u"
, n&1);
}
}
int
main()
{
int
t;
unsigned
int
n;
scanf
(
"%d"
, &t);
for
(; t>0; --t)
{
scanf
(
"%u"
, &n);
if
(!n)
putchar
(
'0'
);
else
toBin(n);
putchar
(
'\n'
);
}
return
0;
}
/**************************************************************
Problem: 1473
User: kkzxak47
Language: C
Result: Accepted
Time:0 ms
Memory:912 kb
****************************************************************/