列表

详情


NC112. 进制转换

描述

给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。

当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。

若 M 为负数,应在结果中保留负号。

数据范围: 
要求:空间复杂度O(log_MN),时间复杂度 O(log_MN)

示例1

输入:

7,2

输出:

"111"

示例2

输入:

10,16

输出:

"A"

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-03-03

class Solution {
public:
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
     string solve(int M, int N) {
        // write code here
        if(M == 0) return "0";//如果M=0就直接返回
        bool flag = false;//记录是不是负数
        if(M < 0){
            //如果是负数flag=true,M 取相反数
            flag = true;
            M = -M;
        }
        string res = "";//返回最终的结果
        string jz = "0123456789ABCDEF";//对应进制的某一位
        while(M != 0){//就对应转换为N进制的逆序样子
            res += jz[M % N];
            M /= N;
        }
        reverse(res.begin(),res.end());//逆序一下才是对应的N进制
        if(flag) res.insert(0,"-");//如果是负数就在头位置插入一个-号
        return res;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-05-20

class Solution {
public:
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    string solve(int M, int N) {
        // write code here
        string t="0123456789ABCDEF";
        string ans="";
        if(M==0) return 0;
        bool flag=false;
        if(M<0){
            flag=true;
            M=-M;
        }
        while(M){
            ans+=t[M%N];
            M/=N;
        }
        if(flag){
            ans+="-";
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2020-12-02

class Solution {
public:


string solve(int M, int N) {
        // write code here
        string ans;
        bool flag = 0;
        if (M<0) {
            M=-M;
            flag = 1;
        }
        const char* t = {"0123456789ABCDEF"} ;
        while (M!=0) {
            ans= t[M%N]+ans;
            M/=N;
        }
        if (flag) {
            ans = '-'+ans;
        }
        return ans;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2021-06-06

class Solution {
public:
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    string solve(int M, int N) {
        // write code here
        if(M==0)return "0";
        if(M==1)return "1";
        bool T=true;
        if(M<0){M=abs(M);T=false;}
        vector<string>str;
        for(int i=0;i<10;i++) str.push_back(to_string(i));
        str.push_back("A");str.push_back("B");str.push_back("C");
        str.push_back("D");str.push_back("E");str.push_back("F");
        
        string res;
        int i=0;
        bool flag = false;
        while(pow(N,i)<M) i++;
        while(i>=0){
            int k=N-1;
            while(k*pow(N,i)>M&&k>0)k--;
            M-=k*pow(N,i);
            res+=str[k];
            i--;
        }
        reverse(res.begin(),res.end());
        while(res.back()=='0')res.pop_back();
        if(!T)res.push_back('-');
        reverse(res.begin(),res.end());
        return res;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2021-03-28

class Solution {
public:
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    string solve(int M, int N) {
        // write code here
        unordered_map<int,char> a;
        int flag = 0;
        if(M < 0)
            flag = 1;
        M = abs(M);
        for(int i = 0; i < N; i++){
            if(i >= 0 && i <= 9)
                a[i] = (char)('0'+i);
            else
                a[i] = (char)('A'+i-10);
        }
        string ans = "";
        int tmp = M;
        while(M){
            int mod = M % N;
            ans.insert(ans.begin(), a[mod]);
            M = M / N;
        }
        if(flag)
            ans.insert(ans.begin(), '-');
        return ans;
    }
};

上一题