在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1)。 每个位上的可能数字是0 或 1,最后面一个非零位可以是2, 例如, 10120(skew) = 1*(25-1) + 0*(24-1) + 1*(23-1) + 2*(22-1) + 0*(21-1) = 31 + 0 + 7 + 6 + 0 = 44.
前十个skew数是 0、1、2、10、11、12、20、100、101、以及102。
10120 200000000000000000000000000000 10 1000000000000000000000000000000 11 100 11111000001110000101101102000 0
44 2147483646 3 2147483647 4 7 1041110737
#include <iostream> #include <string> using namespace std; int main() { int base[32],i,sum; char s[32]; base[0]=1; for(i=1;i<31;i++) base[i]=2*base[i-1]+1; while(1) { gets(s); if(s[0]=='0') break; sum=0; int l=strlen(s); for(i=0;i<strlen(s);i++) { l--; sum+=(s[i]-'0')*base[l]; } cout<<sum<<endl; } return 0; }