题目链接|进制转换

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。保证结果在1n23111 \leq n \leq 2^{31}-1

方法一:按照十六进制转十进制的方法直接进行转换

一般十六进制数用数字0到9和字母A到F表示,其中A~F相当于十进制的10~15,这些称作十六进制数字。十六进制转为十进制的方法是:vpos16\sum{v * pos ^{16}},其中vv是代表第pospos位上的数字,最高位计为 pos=0pos=0

时间复杂度:O(length(N))O(length(N)),解释:由于是按位进行转换,所以复杂度是需要转换的十六进制数的位数。

空间复杂度:O(1)O(1),解释:由于是按位直接进行转换,不需要额外的空间。

alt

#include<iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
 int main() {
     string n;
     while(cin >> n) {
         int bit = 0;
         int ans = 0;
         int len = n.length();
         for(int i = len - 1; i > 1; i--){
             // 如果当前位的是1~9表示的,可以直接计算
             if (n[i] >= '0' && n[i] <= '9'){
                 ans += (n[i]-'0') * pow(16, bit);
                 bit += 1;
             }
             // 如果当前位的是A~F表示的,要先换成十进制的10~15再计算
             else if (n[i] >= 'A' && n[i] <= 'F') {
                 ans += (n[i] - 'A' + 10) * pow(16, bit);
                 bit += 1;
             }
         }
         cout<<ans<<"\n";
     }
     return 0;
 }

方法二:利用python特性直接进行转换

python中可以直接输入十六进制数,使用类型转换int()转换成十进制数输出即可。

时间复杂度:O(N)O(N),解释:python中进行base为22的幂的进制转换的时间复杂度为O(N)O(N)

空间复杂度:O(1)O(1),解释:进行转换不需要额外的空间。

alt

while 1:
    try:
        num=input()
        print(int(num,16))
    except:
        break