百练 2973:Skew数

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述
在 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
 1 #include<iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<cmath>

 5 using namespace std;

 6 

 7 int main() {

 8     char skew[40];

 9     while(scanf("%s",skew) && skew[0] != '0') {

10         int ret=0;

11         int len=strlen(skew);

12         for(int i=0; i<len; i++) {

13             ret += (skew[i]-'0')*(pow(2,len-i)-1);

14         }

15         cout << ret << "\n";

16     }

17     return 0;

18 }

 

你可能感兴趣的:(百练 2973:Skew数)