百练 2973 Skew数 解题报告

链接:http://poj.grids.cn/practice/2973/

题目:

总时间限制:
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 <cstdlib>

 3 #include <cstdio>

 4 #include <cstring>

 5 using namespace std;

 6 const int MAX = 30;

 7 char chs[MAX];

 8 int main()

 9 {

10     //freopen("F:\\input.txt","r",stdin);

11     

12     int sum,step;

13     while(scanf("%s",chs) != EOF && strcmp(chs,"0\0"))

14     {

15         sum = 0;

16         step = 2;

17         for(int i = strlen(chs)-1; i >= 0; i--)

18         {

19             sum += (chs[i] - '0') * (step - 1);

20             step *= 2;

21         }

22         

23         cout<<sum<<endl;

24     }

25     return 0;

26 }

思路:

1.结果使用int保存即可

2.读入一定要用字符串读入,读入整数会无法精度

3.利用step来做优化处理

你可能感兴趣的:(百练 2973 Skew数 解题报告)