进制转换(小白进阶之路)

进制转换

小白第一次写博客,之前都是把题和代码还有知识点以图片的形式存在手机上,然而我发现并没有什么用 ,只是一直躺在手机里,看代码还不方便,而且对知识的印象也不深,所以试试自己写博客,感觉印象会深一些。。
参加了牛客网的暑期多校培训,然后场场自闭(嘤嘤嘤),经常爆零(哭唧唧)。。
废话少说,正题
昨天刚进行完一场,今天补题发现进制转换还是不是很会,翻了下大佬的题解,总结一下二进制转十进制的方法

首先说一个最简单的方法,也是最容易理解的
在这里插入图片描述
将二进制的每一位乘以2的指数次方,然后再相加,这个比较简单,直接上代码

    string s;
    int ans=0;
    cin>>s;
    int len=s.length();
    for(int i=0;i<len;i++)
    {
        ans+=pow(2,len-i-1)*(s[i]-'0');
    }
    cout<<ans<<endl;

今天补题的时候发现大佬的代码

string s;
cin>>s;
int len=s.length();
int ans=0;
for(int i=0;i<len;i++)
{
    ans=ans*2+s[i]-'0';
}
cout<<ans<<endl;

刚开始还不怎么理解,不过后面想了一下,如果把之前算的ans不算出结果,直接带入下一次计算,则相当于二进制的每个数都乘以相应的2的指数次方,那和第一个方法的思想就差不多了。

PS:
如何快速实现二进制与十进制的转换
首先要记住2的指数次方:
1,2,4, 8,16, 32, 64, 128, 256, 512, 1024
1 1
10 2
100 4
1000 8
10000 16
100000 32
1000000 64
10000000 128
100000000 256
1000000000 512
10000000000 1024

将这些记住的话,计算11101就会很快
相当于 16+8+4+1=29 (我怎么感觉和第一个方法差不多emm
计算10001,即为16+1=17

最后再说一下我发现一个很牛b的东西

int a;
printf("%x",&a);

这个东西可以将a以十六进制的形式输出,太神奇了,昨天做题的时候卡死,而且不用考虑前导0的问题,嘤嘤嘤,还是基础不够
具体的还有很多,参见大佬总结:
https://blog.csdn.net/taxue4485/article/details/40684703?utm_source=app

发布了32 篇原创文章 · 获赞 12 · 访问量 1396

猜你喜欢

转载自blog.csdn.net/qq_18873031/article/details/98471298