0
点赞
收藏
分享

微信扫一扫

2008年北大信科研究生复试 机考真题(一)--大数据十进制转换


将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入 多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数) 输出 每行输出对应的二进制数。 样例输入

0
1
3
8

样例输出

0
1
11
#include<stdio.h>
char s[35];//十进制数最多30位
char binary[200];//二进制最多120位
int num[35];
int main()
{
int len;//数字的位数
int temp;//记录当前十进制数字的最高位
while (scanf("%s", s) != EOF)
{
for (len = 0; s[len]; len++)
{
num[len] = s[len] - '0';
}
int i = 0; int binary_length = 0;
while (i < len)//num[i]永远是非0的待处理数最高位
{
binary[binary_length++] = num[len - 1] % 2 + '0';//十进制数字最后一位如果是奇数则为1,反之为0
int c = 0;
for (int j = i; j < len; j++)
{
temp = num[j];
num[j] = (num[j] + c) / 2;//j == i时,num[i]存放的是最高位除上2的结果
if (temp & 1)//temp是奇数
{
c = 10;//高位是奇数,高位的下一位除以2绝对得借位!
}
else { c = 0; }//高位是偶数,不需要借位
}
if (num[i] == 0)//高位已经为0,
{
i++;
}
}
for (int j = binary_length - 1; j >= 0; j--)
{
printf("%c", binary[j]);
}
printf("\n");
}
return 0;
}

举报

相关推荐

0 条评论