百练 2973 Skew数 解题呈报

    添加时间:2013-5-25 点击量:

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


    题目:


    总时候限制:
    1000ms
    内存限制:
    65536kB
    描述
    在 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


    代码:



     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 forint 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来做优化处理惩罚

    我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
    分享到: