OpenJudge 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
#include<stdio.h>

#include<string.h>

char str[35];

int My_Pow(int m,int n)

{

    int i;

    int ans=1;

    for(i=1;i<=n;i++)

        ans*=m;

    return ans;

}

int main()

{

    int i,j;

    int len,sum;

    while(1)

    {

        sum=0;

        memset(str,0,sizeof(str));

        gets(str);

        len=strlen(str);

        if(strcmp(str,"0")==0)

            break;

        for(i=len;i>=1;i--)

            sum+=(My_Pow(2,i)-1)*(str[len-i]-'0');

        printf("%d\n",sum);

    }

    return 0;

}

 

你可能感兴趣的:(open)