题解
二进制整数转十进制
1 条题解
-
0
解题思路
二进制转十进制,可以用"逐位乘 2 累加"的办法,特别适合一边读一边算。
我们从二进制数的最高位(最左边)开始,一位一位往右看,每次都做一件事:
ans = ans × 2 + 当前这一位
这句话的意思是:每看到一个新的一位,先把之前的结果放大一倍(相当于左移一位),再把这一位加上去。
举个例子,把 1001 转成十进制:
- 第 1 位是 1:ans = 0 × 2 + 1 = 1
- 第 2 位是 0:ans = 1 × 2 + 0 = 2
- 第 3 位是 0:ans = 2 × 2 + 0 = 4
- 第 4 位是 1:ans = 4 × 2 + 1 = 9
最后得到 9,正好就是二进制 1001 对应的十进制数。
参考代码
// P4516 二进制转十进制:按位累加换算 #include <iostream> using namespace std; int main() { char s[30]; cin >> s; int ans = 0; for (int i = 0; s[i]; i++) { ans = ans * 2 + (s[i] - '0'); // 每一位先乘以2再加当前位 } cout << ans << endl; return 0; }复杂度分析
只需要把二进制数从左到右扫一遍,二进制位数最多 25 位,所以时间复杂度是 O(位数),空间复杂度是 O(1)。
- 1