2008年北大信科研究生复试 机考真题(一)--大数据十进制转换
2017-09-26 21:06
211 查看
描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
样例输出
十进制转换为二进制问题,这种计算在纸上很容易计算是吧,那么如何在计算机中实现呢?首先我们明确一个十进
数反复除上2,位数肯定一直在减少。在本程序里面用num数组存放除以2后的结果。比如说求19的二进制,那么
num[0]=1,num[1]=9是初值。经过一轮迭代后,binary[0]='1',因为19是奇数嘛!num[0]=0,num[1]=9,在
求num[1]时,c=10,因为temp暂存的最高位是奇数1嘛!肯定要借位嘛!如果不借位,结果是4,正确结果是9!!
借位的意思就是次高位得加上10,么么哒~for (int j = i; j < len; j++)这个循环就是从最高位依次除以2
将新结果存放到num矩阵中!如果num[i]=0说明i位被除没了(i位一直是待处理数字的最高位),比如说19/2=9,
num[0]=0,i就变成1,最高位是个位~,最后再讲bianry数组倒着输出一遍,ok结束了,么么哒~亲!!!
#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;
}
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
0 1 3 8
样例输出
0 1 111000本题思路:
十进制转换为二进制问题,这种计算在纸上很容易计算是吧,那么如何在计算机中实现呢?首先我们明确一个十进
数反复除上2,位数肯定一直在减少。在本程序里面用num数组存放除以2后的结果。比如说求19的二进制,那么
num[0]=1,num[1]=9是初值。经过一轮迭代后,binary[0]='1',因为19是奇数嘛!num[0]=0,num[1]=9,在
求num[1]时,c=10,因为temp暂存的最高位是奇数1嘛!肯定要借位嘛!如果不借位,结果是4,正确结果是9!!
借位的意思就是次高位得加上10,么么哒~for (int j = i; j < len; j++)这个循环就是从最高位依次除以2
将新结果存放到num矩阵中!如果num[i]=0说明i位被除没了(i位一直是待处理数字的最高位),比如说19/2=9,
num[0]=0,i就变成1,最高位是个位~,最后再讲bianry数组倒着输出一遍,ok结束了,么么哒~亲!!!
#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;
}
相关文章推荐
- {数据结构}二进制与十进制转换与二叉树关系
- 2005年浙大研究生复试上机真题-最大连续子序列
- 2007年浙大研究生复试机试真题-游船出租
- javascript各进制数据与十进制之间的转换
- [ActionScript 3.0] 十进制与二进制,十六进制等数据之间的相互转换
- 2008年浙江大学计算机及软件工程研究生机试真题
- 2006年浙大研究生复试机试真题-畅通工程
- 2007年浙大研究生复试机试真题-EXCEL排序
- 题目1163:素数(2008年北京航空航天大学计算机研究生机试真题)
- 题目1163:素数 2008年北京航空航天大学计算机研究生机试真题
- 2006年浙大研究生复试机试真题-统计同成绩学生人数
- 十进制浮点型数据转换成二进制,并在内存中的存储方式
- char 型数据与十进制数据之间的转换
- 九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题
- shell脚本 把十进制数据转换成十六进制
- 数据结构与算法笔记 lesson 10 栈 二进制转换十进制
- 简单的素数问题(2008年北京航空航天大学计算机研究生机试真题)
- 题目1027:欧拉回路 2008年浙江大学计算机及软件工程研究生机试真题
- 简单的素数问题(2008年北京航空航天大学计算机研究生机试真题)
- 又一版 A+B 浙大计算机研究生复试上机考试-2008年