选择题 共15道
判断题 共10道
编程题 共2道
下列流程图的输出结果是?( )
执行以下C++语言程序后,输出结果是( )。
在下列代码的横线处填写( ),完成对有 n 个 int 类型元素的数组 array 由小到大排序。
问题描述
N进制数指的是逢N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题中,十一进制到十五进制也是类似的)。
在本题中,我们将给出 N个不同进制的数。你需要分别把它们转换成十进制数。
提示
对于任意一个L 位 K进制数,假设其最右边的数位为第 0位,最左边的数位为第 L-1位,我们只需要将其第 i位的数码乘以权值Ki,再将每位的结果相加,即可得到原K 进制数对应的十进制数。下面是两个例子:
1. 八进制数 1362 对应的十进制数为 1*83+3*82+6*81+2*80=754;
2. 十六进制数 3F0 对应的十进制数为 3*162+15*161+0*160=1008;
输入描述
输入的第一行为一个十进制表示的整数N 。接下来 N行,每行一个整数K ,随后是一个空格,紧接着是一个K 进制数,表示需要转换的数。保证所有 K进制数均由数字和大写字母组成,且不以 0 开头。保证K 进制数合法。保证所有 K进制数的位数不超过9 。保证 N <= 1000;保证 2 <= K <= 16
输出描述
输出 N行,每一个十进制数,表示对应K 进制数的十进制数值。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
2 8 1362 16 3F0
样例输出 1
754 1008
样例输入 2
2 2 11011 10 123456789
样例输出 2
27 123456789
小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得,生活中很少用到 221-1 这么大的数,生活中常用的0~100 这种数也同样需要用 4个字节的补码表示,太浪费了些。热爱学习的小明通过搜索,发现了一种正整数的变长编码方式。这种编码方式的规则如下:
1. 对于给定的正整数,首先将其表达为二进制形式。例如,(0){10}=(0){2} ,(926){10}=(1110011110){2} 。
2. 将二进制数从低位到高位切分成每组7 bit,不足 7bit的在高位用 0填补。例如,(0){2} 变为0000000 的一组,(1110011110){2}变为 0011110和0000111 的两组。
3. 由代表低位的组开始,为其加入最高位。如果这组是最后一组,则在最高位填上0 ,否则在最高位填上1 。于是,0 的变长编码为 00000000一个字节,926 的变长编码为10011110 和00000111 两个字节。
这种编码方式可以用更少的字节表达比较小的数,也可以用很多的字节表达非常大的数。例如,987654321012345678的二进制为(0001101 1011010 0110110 1001011 1110100 0100110 1001000 0010110 1001110){2},于是它的变长编码为(十六进制表示) CE 96 C8 A6 F4 CB B6 DA 0D ,共9 个字节。
你能通过编写程序,找到一个正整数的变长编码吗?
输入第一行,包含一个正整数N 。约定 0 <= N <= 1018 。
输出一行,输出N 对应的变长编码的每个字节,每个字节均以 2位十六进制表示(其中, A-F 使用大写字母表示),两个字节间以空格分隔。
样例输入1
0
样例输出1
00
样例输入2
926
样例输出2
9E 07
样例输入3
987654321012345678
样例输出3
CE 96 C8 A6 F4 CB B6 DA 0D