十进制转化成任意进制
(牛客网—牛客题霸算法篇—NC112)
题目描述
给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。
要求
当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 ‘A’ 表示此位为 10 , ‘B’ 表示此位为 11 。
若 M 为负数,应在结果中保留负号。
思路
Java实现
进制转换使用除x取余倒排法(x为要转化的进制数)。
当除数为0时停止。
要注意出现负数的情况,由于负数和正数的转换是一样的,我们可以将负数转化成正数再进行转换。
只需要定义一个flag标签用于标识负数就可以了,转换完后加入负号就可以了。
由于是对任意进制的转化,课程会出现x大于10的情况,这种情况下需要用ABCD等来代替。
因此定义一个字符长s=“0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ”。
使用字符串的chatAt()方法获得对应的数字或字母。
定义一个StringBuffer类型的变量存放结果,方便后续进行反转。
代码实现
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";
String s="0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
StringBuffer sb=new StringBuffer();
boolean flag=false;
if(M<0){
flag=true;
M=-M;
}
while(M!=0){
sb.append(s.charAt(M%N));
M=M/N;
}
if(flag==true)
sb.append("-");
return sb.reverse().toString();
}
}