栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【華爲機試之C++】進制轉換

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【華爲機試之C++】進制轉換

描述

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

数据范围:保证结果在 1≤n≤2^31−1

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。不同组的测试用例用n隔开。

示例1
輸入:0xAA
輸出:170
思路
  1. 使用單例模式
  2. 對於2的N次方可以使用左移運算表示,這樣效率高。但是需要注意,編譯器默認會將2的31次方推導為有符號數,也就變成了負數。所以不要用自動推導,使用顯式類型uint32_t。
代碼

NumericCast.h

#pragma once
#include 
#include 

class NumericCast
{
public:
    static NumericCast* getInstance();

public:
    void hex2dec();
    void dec2hex();
    void hex2oct();
    void oct2hex();
    void dec2oct();
    void oct2dec();

    bool isValidData(int32_t data);

private:
    NumericCast() = default;
    ~NumericCast() = default;

private:
    static NumericCast* instance;
    static std::mutex iMutex;
};

NumericCast.cpp

#include 
#include "NumericCast.h"

NumericCast* NumericCast::instance = nullptr;
std::mutex NumericCast::iMutex;


NumericCast* NumericCast::getInstance()
{
    std::unique_lock lock(iMutex);

    if (nullptr == instance) {
        instance = new NumericCast();
    }

    return instance;
}

void NumericCast::hex2dec()
{
    int32_t number;
    std::cin >> std::hex >> number;

    if (isValidData(number)) {
        std::cout << std::dec << number;
    }
    else {
        std::cout << "Invalid argument" << std::endl;
    }
}

void NumericCast::dec2hex()
{
    int32_t number;
    std::cin >> std::dec >> number;

    if (isValidData(number)) {
        std::cout << std::hex << number;
    }
    else {
        std::cout << "Invalid argument" << std::endl;
    }
}

void NumericCast::hex2oct()
{
    int32_t number;
    std::cin >> std::hex >> number;

    if (isValidData(number)) {
        std::cout << std::oct << number;
    }
    else {
        std::cout << "Invalid argument" << std::endl;
    }
}

void NumericCast::oct2hex()
{
    int32_t number;
    std::cin >> std::oct >> number;

    if (isValidData(number)) {
        std::cout << std::hex << number;
    }
    else {
        std::cout << "Invalid argument" << std::endl;
    }
}

void NumericCast::dec2oct()
{
    int32_t number;
    std::cin >> std::dec >> number;

    if (isValidData(number)) {
        std::cout << std::oct << number;
    }
    else {
        std::cout << "Invalid argument" << std::endl;
    }
}

void NumericCast::oct2dec()
{
    int32_t number;
    std::cin >> std::oct >> number;

    if (isValidData(number)) {
        std::cout << std::dec << number;
    }
    else {
        std::cout << "Invalid argument" << std::endl;
    }
}

bool NumericCast::isValidData(int32_t data)
{
    if (data < 1) {
        return false;
    }

    uint32_t max = (1 << 31);

    if (data > max-1) {
        return false;
    }

    return true;
}

main.cpp

#include "NumericCast.h"

int main(int argc, char** argv)
{
    auto numericCast = NumericCast::getInstance();
    
    numericCast->hex2dec();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942625.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号