题解
二进制整数转十进制
1 条题解
-
0
解题思路
小朋友,二进制其实一点都不难懂!
我们平时用的数字叫十进制,数到10就进一位。而二进制只有两个数字 0 和 1,数到 2 就进一位。
怎么把二进制变成十进制呢?有一个非常简单的口诀:
每次读一位,结果先乘2,再加上这一位。
我们拿
1001来试试:- 一开始结果 = 0
- 读到第1位
1:结果 = 0 × 2 + 1 = 1 - 读到第2位
0:结果 = 1 × 2 + 0 = 2 - 读到第3位
0:结果 = 2 × 2 + 0 = 4 - 读到第4位
1:结果 = 4 × 2 + 1 = 9
答案是 9,是不是和样例一模一样!
为什么要"乘2"呢?因为二进制是"满2进一",每一位都代表左边一位的 2 倍。就像十进制里"满10进一",新的数字往左边加一位,其实等于原来的数乘 10 再加这一位。二进制就是把 10 换成了 2 而已。
参考代码
// P4470 二进制整数转十进制:从高位到低位,ans = ans*2 + 当前位 #include <iostream> using namespace std; int main() { char c; // 每次读一个二进制数字符 int ans = 0; // 存转换结果,一开始是0 // 逐个读入二进制数字(cin 会自动跳过空格和换行) while (cin >> c) { ans = ans * 2 + (c - '0'); // 结果乘2,再加上这一位 // c - '0' 可以把字符'0'/'1'变成数字0/1 } cout << ans << endl; // 输出转换好的十进制数 return 0; }复杂度分析
- 时间:二进制数有几位,循环就执行几次,所以是 O(位数),最多25位,飞快!
- 空间:只用了一个变量存结果,是 O(1),几乎不占内存。
- 1