首页 > 试题广场 >

进制转换

[编程题]进制转换
  • 热度指数:54219 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个十进制数 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"
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
        // write code here
        //判断是否为0
        if(M == 0) {
            return "0";
        }
        String table = "0123456789ABCDEF";
        StringBuilder str = new StringBuilder();
        boolean flag = false;
        if(M < 0) {
            M = -M;
            flag = true;
        }

        while(M != 0) {
            str.append(table.charAt(M % N));
            M /= N;
        }

        if(flag == true) {
            str.append("-");
        }
        str.reverse();
        return str.toString();
    }
}
发表于 2023-07-08 10:44:16 回复(0)
public String solve (int M, int N) {
    // write code here
    String pre=M>=0?"":"-";
    M=Math.abs(M);
    StringBuilder sb=new StringBuilder();
    while(M>0){
        int num=M%N;
        if(num<10){
            sb.append(num);
        }else{
            sb.append((char)('A'+num-10));
        }
        M/=N;
    }
    return pre+sb.reverse();
}

发表于 2023-01-04 23:10:22 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
        // write code here
        boolean tag = false;
        if (M < 0) {
            M = -M;
            tag = true;
        }
        String s = "0123456789ABCDEF";
        StringBuffer res = new StringBuffer();
        while (M != 0) {
            res.append(s.charAt( M % N));
            M = M / N;
        }
        if (tag) {
            res.append("-");
        }
        res.reverse();
        return res.toString();
    }
}

发表于 2022-08-03 14:27:07 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
        // write code here
        String hex = "0123456789ABCDEF";
        StringBuilder sb = new StringBuilder();
            int X = Math.abs(M);
        while(X / N != 0){
            sb.insert(0,hex.charAt(X % N));
            X = X / N;
        }
        sb.insert(0,X);
        if(M < 0){
            sb.insert(0,"-");
        }
        return sb.toString();
    }
}

调用StringBuilder的insert方法,实现倒序插入,最后判断正负插入负号就行
发表于 2022-06-28 14:31:44 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
        // write code here
        return Integer.toString(M,N).toUpperCase();
    }
}

发表于 2022-06-09 15:09:51 回复(0)
import java.util.*;
public class Solution {
    public String solve (int M, int N) {
        if(M < 0) 
            return "-" + solve(-1 * M, N);
        String[] dic = new String[]{"0", "1", "2", "3", "4", "5", "6", "7","8", "9", "A", "B", "C", "D", "E", "F"};
        String res = new String();
        int temp;
        while(M > 0) {
            temp = M % N;
            res = dic[temp] + res;
            M = M / N;
        }
        return res;
    }
}

发表于 2022-06-01 16:29:37 回复(0)
import java.util.*;


public class Solution {
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
        // write code here
        return Integer.toString(M,N).toUpperCase();
    }
}
发表于 2022-05-26 11:31:08 回复(0)
import java.util.*;


public class Solution {
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    StringBuilder res=new StringBuilder();
    public String solve (int M, int N) {
        // write code here
        
        boolean flag = M < 0;
        if(M == 0) return "0";
        M = Math.abs(M);
        while(M != 0){
            int s=M%N;
            if(s>=10)
                change(s);
            else
                res.append(s);
            M /= N;
        }
        if(flag) res.append("-");
        return res.reverse().toString();
    }
    public void change(int s){
        if(s==10)
            res.append('A');
        else if(s==11)
            res.append('B');
        else if(s==12)
            res.append('C');
        else if(s==13)
            res.append('D');
        else if(s==14)
            res.append('E');
        else if(s==15)
            res.append('F');
        return;
    }
}
发表于 2022-03-25 17:23:40 回复(0)
import java.util.*;


public class Solution {
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    
    public String solve (int M, int N) {
        boolean isNegative = false;
        if(M < 0) {
            isNegative = true;
            M = -M;
        }
        char[] map = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        StringBuilder sb = new StringBuilder();
        int remainder = 0;
        while(M != 0) {
            sb.insert(0, map[M % N]);
            M /= N;
        }
        String res = sb.toString();
        return isNegative ? "-" + res : res;
    }
}

发表于 2022-01-29 09:11:10 回复(0)
import java.util.*;
public class Solution {
    public String solve (int M, int N) {
        // write code here
        return Integer.toString(M, N).toUpperCase();
    }
}

发表于 2021-09-08 22:21:10 回复(0)
import java.util.*;
public class Solution {
    public String solve (int M, int N) {
        // write code here
        if(N==10) return M+"";
        StringBuilder sb = new StringBuilder();
        String pre = "";
        if(M<0){
            M = -M;
            pre="-";
        }
        String place="0123456789ABCDEF";
        while(M>0){
            sb.append(place.charAt(M%N));
            M/=N;
        }
        return pre+sb.reverse().toString();
    }
}
发表于 2021-08-23 10:10:54 回复(0)
使用字符的数值规律解决num的情况。
import java.util.*;


public class Solution {
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
        String res = "";
        boolean sign = false;
        if (M < 0) {
            M = -M;
            sign = true;
        }
        while (M != 0) {
            int num = M % N;
            if (num >= 10) {
                char mid = (char)('A' + num - 10);
                res = mid + res;
            } else {
                res = num + res;
            }
            M = M / N;
        }
        if (sign) {
            return "-" + res;
        }
        return res;
    }
}

发表于 2021-08-05 16:40:41 回复(0)
import java.util.*;


public class Solution {
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
        if(M==0){
            return "0";
        }
        char[] nums = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        StringBuilder sb = new StringBuilder();
        boolean flag = M<0;
        M = Math.abs(M);
        while(M>0){
            sb.append(nums[M%N]);
            M/=N;
        }
        String res = sb.reverse().toString();
        return flag?"-"+res:res;
    }
}

发表于 2021-06-07 12:30:35 回复(0)
使用表格法输出字母:
先判断正负,记录下来,再使用正数计算:
public class Solution {
    
    char[] table = new char[]{'A', 'B', 'C', 'D', 'E', 'F'};
    
    public String solve (int M, int N) {
        // write code here
        
        StringBuffer result = new StringBuffer();
        
        int m;
        
        if (M < 0) {
            m = -M;
        } else {
            m = M;
        }
        
        while (m != 0) {
            int cur = m % N;
            if (cur > 9) {
                result.append(table[cur - 10]);
            }else {
                result.append(cur);
            }
            
            m /= N;
        }
        
        if(M < 0) {
            result.append('-');
        }
        
        return result.reverse().toString();
    }
}


发表于 2021-05-14 11:23:54 回复(0)
import java.util.*;
public class Solution {
    final static char[] digits = {
            '0' , '1' , '2' , '3' , '4' , '5' ,
            '6' , '7' , '8' , '9' , 'A' , 'B' ,
            'C' , 'D' , 'E' , 'F' , 'G' , 'H' ,
            'I' , 'J' , 'K' , 'L' , 'M' , 'N' ,
            'O' , 'P' , 'Q' , 'R' , 'S' , 'T' ,
            'U' , 'V' , 'W' , 'X' , 'Y' , 'Z'
    };
    public static  String solve (int M, int N) {
        StringBuilder ret=new StringBuilder();
        boolean flag=true;
        if(M<0){
            flag=false;
            M=Math.abs(M);
        }
        int i=0;
        do{
            ret.append(digits[M%N]);
            M=M/N;
        }while(M!=0);
        ret.reverse();
        return flag==false?"-"+ret.toString():ret.toString();
    }
}
发表于 2020-12-08 20:58:38 回复(0)
import java.util.*;


public class Solution {
    //建立映射关系
    public String[] mapping = {"0","1","2","3","4","5","6","7","8","9",
    "A","B","C","D","E","F"};
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
   //循环
    /*public String solve(int M,int N){
        // write code here
        StringBuilder sb = new StringBuilder();
        int insert = 0;
        if(M < 0){
            sb.append("-");
            M *= -1;
            insert = 1;
        }
        solve(M,N,sb,insert);
        return sb.toString();
    }
    public void solve(int M,int N,StringBuilder sb,int insert){
        while (M!=0){
            sb.insert(insert,mapping[M%N]);
            M/=N;
        }
    }*/
    //递归
    public String solve(int M,int N) {
        // write code here
        StringBuilder sb = new StringBuilder();
        if(M < 0){
            sb.append("-");
            M *= -1;
        }
        solve(M,N,sb);
        return sb.toString();
    }
    public void solve(int M,int N,StringBuilder sb){
        if(M==0)return;
        sb.append(solve(M/N,N));
        sb.append(mapping[M%N]);
    }
}

发表于 2020-12-06 19:33:07 回复(0)
import java.util.*;


public class Solution {

    public String solve (int M, int N) {
        
        if(M == 0)
            return "0";
        int flag = 1;
        
        if (M < 0){
            flag = -1;
            M = Math.abs(M);
        }
        
        char[] charOfNums = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        
        int curNum = M;
        StringBuilder builder = new StringBuilder();
        while(curNum > 0){
            builder.insert(0, charOfNums[curNum % N]);
            curNum = curNum / N;
        }
        
        return flag == 1 ? builder.toString() : "-" + builder.toString();
    }
}

发表于 2020-11-26 15:37:22 回复(0)

问题信息

上传者:牛客332641号
难度:
24条回答 6238浏览

热门推荐

通过挑战的用户

查看代码