AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0021. 补码二进制转十进制

中等通过率 57% · 提交 190 · 通过 109
字符串数学模拟

小慕最近在开发一个二进制数据解析器,用来读取来自旧设备的存储文件。这些文件使用补码格式保存整数,但小慕发现,当数据的是`1`时,解析结果总是出错,数值莫名其妙变成了负数。 为了修复这个Bug,小慕需要写一段程序,把给定的二进制字符串转换成对应的十进制整数。 文件中的数值采用补码存储,规则如下: - 若字符串长度小于 `32`,直接按正整数转换。 - 若字符串长度等于 `32`,需按补码规则处理: - 最高位是 `0` 时,直接转换为十进制数。 - 最高位是 `1` 时,按补码转换,结果可能为负数。

提示:带虚线的词点一下有通俗解释。

输入描述

一个二进制字符串 `S`(仅包含`0`和`1`)。 输入保证转换后的十进制数值在**32 位有符号整数**(`-2^{31}` 到 `2^{31}-1`)的范围内。

输出描述

输出 `S` 所表示的十进制整数。

示例

示例 1

输入

00011

输出

3

示例 2

输入

11111111111111111111111111111110

输出

-2

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
补码转换示例 输入二进制字符串 S 判断长度 长度 < 32 直接按正整数转换 长度 = 32 检查最高位 最高位 最高位=0 → 直接转换 最高位=1 → 补码转负数
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「补码二进制转十进制」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。