返回 课程

信奥AC之路-3级

0% 完成
0/0 步骤
  1. 第一课:数组基础
    4 主题|小节
  2. 第二课:数组基础二
    6 主题|小节
  3. 第三课:数组基础三
    6 主题|小节
  4. 第四课:数组基础四
    7 主题|小节
  5. 第五课:数组基础五
    5 主题|小节
  6. 第六课:数组用于统计,去重,排序
    5 主题|小节
  7. 第七课:冒泡排序
    6 主题|小节
  8. 第八课:数组连续性元素
    6 主题|小节
  9. 第九课:数组综合一
    7 主题|小节
  10. 第十课:字符数组
    7 主题|小节
  11. 第十一课:字符数组基础应用
    5 主题|小节
  12. 第十二课:字符数组基础应用二
    6 主题|小节
  13. 第十三课:字符数组进阶
    6 主题|小节
  14. 第十四课:字符串进阶二
    6 主题|小节
  15. 第十五课:字符串(STL)
    9 主题|小节
  16. 第十六课:字符串基础
    6 主题|小节
  17. 第十七课:字符串函数
    6 主题|小节
  18. 第十八课:字符串函数二
    4 主题|小节
  19. 第十九课:sort函数
    7 主题|小节
  20. 第二十课:字符串进阶
    7 主题|小节
  21. 第二十一课:字符串进阶二
    6 主题|小节
  22. 第二十二课:进制转换--十进制转其他进制
    5 主题|小节
  23. 第二十三课:进制转换--其他进制转十进制
    5 主题|小节
  24. 第二十四课:二进制,八进制,十六进制转换
    5 主题|小节
  25. 第二十五课:数据编码基础
    6 主题|小节
  26. 第二十六课:位运算基础
    6 主题|小节
课 进展
0% 完成

“小朋友们,”我微笑着说,”计算机内部使用的是二进制,只有0和1两个数字。今天我们首先来学习如何将二进制数转换成我们熟悉的十进制数。”

23.1.1 二进制转十进制原理

二进制数转换为十进制数的原理是:从右到左,每一位的值是2的幂次方,第i位(从右往左数,从0开始)的值是该位数字乘以2^i。

例如:二进制数1101转换为十进制:

  • 1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8 + 4 + 0 + 1 = 13

23.1.2 二进制转换十进制

题目描述: 请将一个 25 位以内的 2 进制正整数转换为 10 进制!

输入格式: 输入一个 25 位以内的二进制正整数。

输出格式: 该数对应的十进制。

样例输入

111111111111111111111111

样例输出

16777215

代码实现

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s;           // 用字符串存储二进制数
    cin >> s;          // 输入二进制字符串
    int a = 0;         // 初始化十进制结果为0
    
    // 从左到右遍历二进制字符串
    for(int i = 0; i < s.size(); i++){
        a = a * 2 + (s[i] - '0');  // 每次乘2并加上当前位的值
    }
    
    cout << a;         // 输出十进制结果
    return 0;
}

算法解析

  1. 使用字符串存储二进制数,因为可能很长(最多25位)
  2. 从左到右遍历字符串,使用秦九韶算法(霍纳法则)
  3. 每遍历一位,将之前的结果乘以2,再加上当前位的值
  4. s[i] - '0'将字符’0’或’1’转换为数字0或1
  5. 最终得到十进制结果