1. skew数(相邻数字的技术不成等比)
问题描述
在 skew binary 表示中, 第 k 位的值 x k 表示 x k (2 k+1 -1)。 每个位上的可能数字是 0 或1,最后面一个非零位可以是 2, 例如, 10120(skew) = 1(2 5 -1) + 0(2 4 -1) + 1(2 3 -1) + 2(2 2 -1)
+ 0(2 1 -1) = 31 + 0 + 7 + 6 + 0 = 44. 前十个 skew 数是 0、1、2、10、11、12、20、100、101、
以及 102。
输入数据
输入包含一行或多行,每行包含一个整数 n。 如果 n = 0 表示输入结束,否则 n 是一
个 skew 数
输出要求
对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 2 31 -1 =
2147483647
输入样例
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
输出样例
44
2147483646
3
2147483647
4
7
1041110737
解题思路
skew 数的相邻位上,基数之间没有等比关系。计算每一位的基数后,再把一个 skew 数
转换成十进制表示就很简单。对于长度为 k 的 skew 数,最后一位数字的基数为 2 k -1。由于
转换成十进制后, n 不超过 2 31 -1,因此输入 skew 数的最大长度不超过 31。(char stew[32];)
用一个整型数组 base[31],依次存储 skew 数最末位、倒数第 2 位、…..、第 31 位的基
数值。使用这个数组,把每个 skew 数转换成对应的十进制数。