575 Skew Binary

题目大意:

题目原文:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=516

斜二进制数满足:

所以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 }
原文地址:https://www.cnblogs.com/syiml/p/2910768.html