程序设计引导及在线实践这本书中的进制问题中,有一个关于任意进制转换为十进制的算法,
long b2ten(char* x, int b) {
int ret = 0;
int len = strlen(x);
for (int i = 0; i < len; i++) {
if (x[i]-'0' >= b) return -1;
ret *= b;
ret += x[i]-'0' ;
}
return (long)ret;
}
其实是,十进制转换为其它进制的算法的逆过程。
例如,121(8)=1*8^2+2*8^1+1*8^0=81(10);
81(10)转为121(8)的过程如下;
81/8=10;余1;
10/8=1;余2;
1;
取逆数位121(8);
其逆过程为121(8)转换为81(10)的过程为:
ret=0;
ret=ret*8=0;
ret=ret+1=1;
ret=ret*8=8;
ret=ret+2=10;
ret=ret*8=80;
ret=ret+1=81;
为其逆过程。