问题描述
在 skew binary 表示中, 第 k 位的值xk 表示xk(2k+1-1)。 每个位上的可能数字是0 或
1,最后面一个非零位可以是2, 例如, 10120(skew) = 1(25-1) + 0(24-1) + 1(23-1) + 2(22-1)
+ 0(21-1) = 31 + 0 + 7 + 6 + 0 = 44. 前十个skew 数是 0、1、2、10、11、12、20、100、101、
以及102。
输入数据
输入包含一行或多行,每行包含一个整数n。 如果 n = 0 表示输入结束,否则n 是一
个skew 数
输出要求
对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 231-1 =
2147483647
输入样例
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
输出样例
44
2147483646
3
2147483647
4
7
1041110737
#include <stdio.h> #include <string.h> int main(){ char skew[31]; int length, i; int total = 0; int element[31]; element[0] = 2; for(i = 0; i < 30; i++) element[i + 1] = element[i] * 2; while(1){ scanf("%s",skew); if(strcmp(skew,"0") == 0) break; length = strlen(skew); for(i = 0; i < strlen(skew); i++){ length --; total += (skew[i] - '0') * (element[length] - 1); } } printf("%d\n", total); return 0; }