C++实现十进制减二进制转换计算及要点解析
## 💡 解题思路分析 这道题的核心在于**进制转换**。我们需要: 1. 将第一行输入的十进制整数 `A` 直接保存为整数 2. 将第二行输入的二进制字符串 `B` 转换为十进制 3. 计算 `A - B` 4. 以十进制输出结果 **关键点**:二进制转十进制可以使用 C++ 标准库函数 `std::stoi` 或 `std::bitset`,也可以手动逐位计算。 --- ## 🛠️ C++ 实现代码 ```cpp #include <iostream> #include <string> #include <cstdlib> // 可选,用于 strtol using namespace std; int main() { int A; string binaryB; // 读取第一行:十进制整数 cin >> A; // 读取第二行:二进制字符串 cin >> binaryB; // 将二进制字符串转换为十进制整数 // 方法1:使用 stoi 指定进制为2 int B = stoi(binaryB, nullptr, 2); // 方法2:手动转换(备用) /* int B = 0; for (char c : binaryB) { B = B * 2 + (c - '0'); } */ // 计算结果 int result = A - B; // 输出结果 cout << result << endl; return 0; } ``` --- ## 📖 代码详细解释 ### 1. 输入处理 - `cin >> A` 读取十进制整数(如 15) - `cin >> binaryB` 读取二进制字符串(如 "1101") ### 2. 二进制转十进制 - **方法1(推荐)**:`stoi(binaryB, nullptr, 2)` - `stoi` 是 C++11 引入的标准库函数 - 参数1:要转换的字符串 - 参数2:`nullptr` 表示不需要记录停止位置 - 参数3:`2` 表示按二进制解析 - **方法2(手动转换)**: ```cpp int B = 0; for (char c : binaryB) { B = B * 2 + (c - '0'); } ``` 逐位累加:每次将当前结果乘以 2,再加上当前位数字。 ### 3. 计算结果 直接 `A - B`,注意题目保证结果在 int 范围内(A < 1000,B 长度 ≤ 10 位,最大 1023)。 --- ## ✅ 示例验证 | 输入 | 处理过程 | 输出 | |------|----------|------| | 15<br>1101 | A=15, "1101"→13, 15-13=2 | 2 | | 100<br>101 | A=100, "101"→5, 100-5=95 | 95 | | 5<br>110 | A=5, "110"→6, 5-6=-1 | -1 | --- ## ⚠️ 注意事项 - **结果可能为负数**:题目未明确限制,但逻辑上 A < B 时输出负数即可 - **输入格式**:第二行是二进制字符串,可能含有前导零(如 "00101"),`stoi` 会正确处理 - **边界情况**:二进制长度不超过 10 位,最大值为 1023,不会溢出 int --- ## 🚀 进阶建议 1. **扩展性**:如果需要多次计算,可以封装一个 `binaryToDecimal` 函数 2. **错误处理**:可以检查输入字符串是否只含 0/1,避免非法输入 3. **性能**:数据量很小,无需特别优化;但若处理超大数,可考虑 `long long` 或大数库 ```cpp // 推荐的安全封装版本 int binaryToDecimal(const string& s) { int result = 0; for (char c : s) { if (c != '0' && c != '1') { throw invalid_argument("Invalid binary string"); } result = result * 2 + (c - '0'); } return result; } ``` --- ######[AI写代码神器 | 955点数解答 | 2026-08-14 21:25:25]
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)315
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)559
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)398
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)421
- C++实现单门课程成绩管理系统:教师学生双身份操作全解析(GPT | 6361点数解答 | 2024-05-24 02:01:02)657
- C++ 实现超实用单门课程成绩管理系统,教师学生灵活使用! (GPT | 68点数解答 | 2024-05-24 10:17:09)411
- C++实现:功能完备的单门课程成绩管理系统(GPT | 4293点数解答 | 2024-05-24 10:20:03)451
- JS函数 change(n,x):轻松实现数字二进制与八进制转换及注意要点(百度文心 | 436点数解答 | 2025-04-09 22:19:11)187
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)474
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)181
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)160
- 解决代码WA问题:修改整数溢出问题后的计算代码(字节豆包 | 749点数解答 | 2026-05-10 16:20:03)95