其它进制转十进制的方法

众所周知

二进制转化为十进制的方法很简单,只要把加上有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;
}

因为是从最高位开始,我甚至不用将数组的头尾调换(在进行高精度数组运算的时候不得不这么做,因为每一个二进制数长度可能不同,即最高位不一样,但是最低位可以保证是一样的)

 

上面的是二进制的,把这个方法应用到其它进制也是可以的,只要把乘的数换成该进制的数就可以了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值