C++ 八进制转十六进制:解密古老宝箱的密码

你发现了一个神秘的古老宝箱,上面有一行八进制编码的密码。你是一名优秀的程序员,决定利用你的技能打开它!

问题描述

宝箱上的八进制数字无法直接读取,你需要编写一个 C++ 程序将这个八进制数字转换为十六进制数字,以找到正确的密码。

输入描述

输入是一个八进制数,以字符串形式给出。该字符串只包含数字(0-7)和点(.)。

输出描述

输出一行,表示对应的十六进制数,以字符串形式给出,10-15 以大写字母 A-F 表示。

示例

| 输入 | 输出 | |---|---| | 32 | 1A | | 10.04 | 8.1 | | 1.5 | 1.A | | 32.0 | 1A.0 |

提示

  • 输入的八进制数对应的十进制数在 0~2147483647 之间,可能会有小数。
  • 如果输入中有小数部分,保证输出一定有小数部分内容。

解决方案

可以使用以下步骤来将八进制数字转换为十六进制数字:

  1. 将输入的八进制数字转换为十进制数字。
  2. 将十进制数字转换为十六进制数字。
  3. 如果输入中有小数部分,则将小数部分转换为十六进制数字。

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 输出结果。

希望以上内容对你有所帮助!

C++ 八进制转十六进制:解密古老宝箱的密码

原文地址: https://www.cveoy.top/t/topic/nGPv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录