C++ 八进制转十六进制:解密古老宝箱的密码
C++ 八进制转十六进制:解密古老宝箱的密码
你发现了一个神秘的古老宝箱,上面有一行八进制编码的密码。你是一名优秀的程序员,决定利用你的技能打开它!
问题描述
宝箱上的八进制数字无法直接读取,你需要编写一个 C++ 程序将这个八进制数字转换为十六进制数字,以找到正确的密码。
输入描述
输入是一个八进制数,以字符串形式给出。该字符串只包含数字(0-7)和点(.)。
输出描述
输出一行,表示对应的十六进制数,以字符串形式给出,10-15 以大写字母 A-F 表示。
示例
| 输入 | 输出 | |---|---| | 32 | 1A | | 10.04 | 8.1 | | 1.5 | 1.A | | 32.0 | 1A.0 |
提示
- 输入的八进制数对应的十进制数在 0~2147483647 之间,可能会有小数。
- 如果输入中有小数部分,保证输出一定有小数部分内容。
解决方案
可以使用以下步骤来将八进制数字转换为十六进制数字:
- 将输入的八进制数字转换为十进制数字。
- 将十进制数字转换为十六进制数字。
- 如果输入中有小数部分,则将小数部分转换为十六进制数字。
C++ 代码示例
#include <iostream>
#include <string>
using namespace std;
string octToHex(string octNum) {
// 将八进制数字转换为十进制数字
int decNum = stoi(octNum, nullptr, 8);
// 将十进制数字转换为十六进制数字
string hexNum = '';
while (decNum > 0) {
int remainder = decNum % 16;
if (remainder < 10) {
hexNum = to_string(remainder) + hexNum;
} else {
hexNum = char('A' + remainder - 10) + hexNum;
}
decNum /= 16;
}
return hexNum;
}
int main() {
string octNum;
cin >> octNum;
// 检查是否有小数部分
int dotIndex = octNum.find('.');
if (dotIndex != string::npos) {
string integerPart = octNum.substr(0, dotIndex);
string decimalPart = octNum.substr(dotIndex + 1);
string hexIntegerPart = octToHex(integerPart);
string hexDecimalPart = octToHex(decimalPart);
cout << hexIntegerPart << '.' << hexDecimalPart << endl;
} else {
string hexNum = octToHex(octNum);
cout << hexNum << endl;
}
return 0;
}
代码解释
octToHex函数将八进制字符串参数转换为十六进制字符串,并返回结果。main函数首先读取输入的八进制字符串。- 然后,它检查输入字符串中是否有小数部分。如果有小数部分,则将整数部分和小数部分分别转换为十六进制字符串,并用点号分隔它们输出。如果没有小数部分,则直接将整个输入字符串转换为十六进制字符串输出。
- 程序使用了
stoi函数将字符串转换为整数,使用了字符串的find函数来查找点号的位置,以及使用了字符串的substr函数来提取子字符串。同时,它使用了一个循环来将十进制数字转换为十六进制数字,并根据余数的大小选择正确的字符。最后,程序使用cout输出结果。
希望以上内容对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/nGPv 著作权归作者所有。请勿转载和采集!