十进制转N进制的实现
今天刷力扣题的时候遇到了一道让我有点手足无措的题目,所以记录一下。并且该方法可以扩展到任意的进制。
力扣上的题目是这样的:
给定一个整数 num
,将其转化为 7 进制,并以字符串形式输出。
示例1:
输入: num = 100 输出: "202"
示例2
输入: num = -7 输出: "-10"
力扣官方给的答案是这样的:
class Solution {
public String convertToBase7(int num) {
if (num == 0) {
return "0";
}
boolean negative = num < 0;
num = Math.abs(num);
StringBuffer digits = new StringBuffer();
while (num > 0) {
digits.append(num % 7);
num /= 7;
}
if (negative) {
digits.append('-');
}
return digits.reverse().toString();
}
}
但我经过几次数据测试发现,官方的解法可以转换成十进制数据转成N进制的一种通用解决方案。
给定一个整数,转换成对应的N进制,并以字符串的形式输出。
根据官方的思路可以整理出由十进制转换成对应N进制的解决方案。
class Solution {
public String convertToBaseN(int num,int radix) {
if(num==0) return "0";
//存储运算结果
StringBuilder sb=new StringBuilder();
//判断num是正数还是负数
boolean flag=num<0;
//无论正负,统一对num取绝对值
num=Math.abs(num);
//只要num运算之后不为0,则继续做模运算,然后做除法运算,最后将字符串对象反转即可得到对应的N进制字符串结果
while(num!=0){
sb.append(num%radix);
num/=radix;
}
if(flag){
sb.append("-");
}
return sb.reverse().toString();
}
}