- 时间限制:
- 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; }