面试必考真题-算法篇 牛客网
位运算
题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数。
备注:
M是32位整数,2<=N<=16.
题目分析:
因为转化的进制是在2进制到16进制之间,所以单纯的除法无法满足需求,所以利用字符串来进行进制转换,转换完成后进行字符串翻转即可。同时,要注意负数的情况,不然会出现死循环。
下面是Java代码
import java.util.*;
public class Solution {
/**
* 进制转换
* @param M int整型 给定整数
* @param N int整型 转换到的进制
* @return string字符串
*/
public String solve (int M, int N) {
// write code here
if(M == 0){
return "0";
}
//要考虑 M 为负数的情况
boolean flag = true;
if(M < 0){
M = -M;
flag = false;
}
StringBuffer res = new StringBuffer();
String hex = "0123456789ABCDEF";
while(M !=0){
res.append(hex.charAt(M%N));
M = M / N;
}
// 字符串反转
return flag == true ? res.reverse().toString():"-"+res.reverse().toString();
}
}