题解 | #进制转换#

进制转换

http://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6

题目分析

  1. 题目给出一组十六进制的数字
  2. 我们要输出对应的十进制数字

方法一:库函数

  • 实现思路
    • int stoi(const std::string& str, std::size_t* pos = 0, int base = 10);

    • c++中使用stoi函数支持直接转换,将str字符串从pos的位置开始,以base进制转换成int类型

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main() {
    string s;
    while(cin >> s) {
        cout << stoi(s, 0, 16) << endl;    // 直接调用库函数解决
    }
}

复杂度分析

  • 时间复杂度:O(n)O(n),线性的复杂度转换,其中n表示输入字符串的长度
  • 空间复杂度:O(1)O(1),只需要常量级别的空间大小

方法二:遍历

  • 实现思路
    • 对字符串的每一位进行遍历

    • 区分数字部分和字母部分

    • 数字部分直接转换为int类型,并每轮累计16倍乘关系

    • 字母部分要注意转换成10-15之间的数字,并每轮累计16倍乘关系

    • 输出最后的数字

alt

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

int main() {
    string s;
    while(cin >> s) {        
        int n = 0;
        for(int i = 2; i < s.size(); i++) {            // 遍历十六进制字符串
            n *= 16;                                   // 每轮在前一轮的基础上*16
            if(s[i] >= '0' && s[i] <= '9') {           // 判断如果要处理数字
                n += (s[i] - '0');
            }
            else {
                n += (s[i] - 'A' + 10);                // 判断如果要处理字母
            }
        }
        cout << n << endl;
    }
    
    return 0;
}

复杂度分析

  • 时间复杂度:O(n)O(n),线性的复杂度转换,其中n表示输入字符串的长度
  • 空间复杂度:O(1)O(1),只需要常量级别的空间大小
全部评论

相关推荐

字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务