题解
【入门】二进制转换十进制
1 条题解
-
0
解题思路
题目要求把二进制数转换成十进制数。二进制最长 25 位,结果在 int 范围内。
方法:按位展开。
二进制转十进制,就是把每一位乘以对应的 2 的幂次再相加:
个位 × 2⁰,十位 × 2¹,百位 × 2²……
步骤:
- 用 x 记录当前位的权重,从 1(2⁰)开始
- 从最低位(字符串末尾)往最高位扫:
- 这一位 × x,累加到结果 r
- x 乘 2,变成下一位的权重
- 输出 r
举例 二进制 1101:
- 个位 1×1=1
- 十位 0×2=0
- 百位 1×4=4
- 千位 1×8=8
- 总和 = 1+0+4+8 = 13
参考代码
#include <iostream> #include <string> using namespace std; int main() { int x = 1, r = 0; string s; cin >> s; for (int i = s.size() - 1; i >= 0; i--) { r += (s[i] - '0') * x; // 这一位 × 权重 x = x * 2; // 权重翻 2 倍 } cout << r; return 0; }复杂度分析
- 时间复杂度:O(N),N 为位数
- 空间复杂度:O(1)
- 1