题意:
输入一个skew binary 表示的数,第k位的进制为2的k+1次方减1。用十进制输出。
法一:
直接算出第k位的进制。
#include<stdio.h>
#include<string.h>
int main()
{
char numb[1000];
int length;
while(scanf("%s",numb) != EOF)
{
if(strcmp(numb,"0") == 0)
break;
length = strlen(numb);
long nten = 0;
int two = length,t = 1;
for(int i = 0;i < length; i++){
t = 1;
for(int j = 1;j <= two; j++)
t *= 2;
two--;
nten += (numb[i] - '0')*(t-1);
}
printf("%ld\n",nten);
}
return 0;
}
法二:
可以用数组存入进制。
#include<stdio.h>
#include<string.h>
int main()
{
int length,base[31];
char skew[32];
base[0] = 1;
for(int i = 1;i < 31; i++) base[i] = 2*base[i-1] + 1; //可以找出的规律
while(1){
scanf("%s",skew);
if(strcmp(skew,"0") == 0) break;
length = strlen(skew);
int t = length;
int sum = 0;
for(int i = 0;i < length; i++){
t--;
sum += (skew[i] - '0')*base[t];
}
printf("%d\n",sum);
}
return 0;
}