众所周知
二进制转化为十进制的方法很简单,只要把加上有1的地方所代表的2的次方就可以了
比如101 = 2^0 + 2^2 = 5
实现这个也非常简单,如果想要提高效率的话,也可以使用快速幂(这个我之前写过了)
这里还有另一个方法(算法书里看到的)
说明一下过程
比如101,初始化结果变量(result)为0
从最左边开始,每判断一位,result先乘2,然后加上这一位的数字(0或1)
然后就是这样:
第一轮:result = 0 * 2 + 1 = 1
第二轮:result = 1 * 2 + 0 = 2
第三轮:result = 2 * 2 + 1 = 5
结束
最后结果是5
实现也是相当简单,而且效率也高了不少
代码如下:
#include<stdio.h>
int main(void)
{
int num[20] = {0}, length = 0, result = 0;
for(char c; (c = getchar()) != '\n'; )
num[length++] = c - '0';
for(int i = 0; i < length; i++)
result = result * 2 + num[i];
printf("%d", result);
return 0;
}
因为是从最高位开始,我甚至不用将数组的头尾调换(在进行高精度数组运算的时候不得不这么做,因为每一个二进制数长度可能不同,即最高位不一样,但是最低位可以保证是一样的)
上面的是二进制的,把这个方法应用到其它进制也是可以的,只要把乘的数换成该进制的数就可以了