题目大意:
斜二进制数满足:
所以0-10分别是0, 1, 2, 10, 11, 12, 20, 100, 101, 和 102.要求输入斜二进制数,输出十进制数。
首先看到题目n不大于 231 - 1 = 2147483647 而例子中就有2147483647,所以输入的斜二进制数的位数不会超过31位。如此多的位数,我采用了字符串数组来储存输入。由于是字符串,那么数组长度就要32了。然后用一个char*指针变量来指向各个位数进行计算。计算的结果以long型储存、输出。
附上代码:
View Code
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 char a[32],*z; 6 long x; 7 int i,j; 8 while(1) 9 { 10 scanf("%s",a); 11 if(a[0]=='0'&&a[1]=='\0') break;//退出条件 12 for(i=0;i<32;i++) 13 { 14 if(a[i]==0) {z=&a[i];break;} //使指针z指向'\0' 15 } 16 j=1; 17 x=0; 18 while(1) 19 { 20 z--; 21 if(*z!=0) x+=(*z-'0')*((long)pow(2,j)-1); 22 j++; 23 if(z==a) break;//也可以使用do-while循环控制退出 24 } 25 printf("%ld\n",x); 26 } 27 return 0; 28 }