在skew binary表示中, 第k 位的值xk表示xk(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>
int myPow(int a,int j){
int i = a;
while(--j){
a *= i;
}
return a;
}
int skewToAlgorism(char *x)
{
int i,j,len = strlen(x);
int al = 0;
int kResult = 0;
if(strcmp(x,"0") == 0)
return -1;
j = len;
for(i = 0;i < len;i++){
kResult = (x[i]-'0')*(myPow(2,j)-1);
al += kResult;
j--;
}
return al;
}
int main()
{
char skew[32];
int algorism;
while(1){
scanf("%s",skew);
algorism = skewToAlgorism(skew);
if(algorism == -1){
break;
}
printf("%d\n",algorism);
}
return 0;
}
/*
此题也是进制的转换问题,但此题转换的规则与一般的进制转换不同,虽然如此,知道规则也是很容易做出来的
分析有一下难点:
1、数字输入的存储类型
2、2的不同次方的计算,注意:本程序未调用头文件里的自带函数
*/