酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]