携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情
一、题目描述:
给定一个整数 num
,将其转化为 7
进制,并以字符串形式输出。
示例 1:
输入: num = 100
输出: "202"
示例 2:
输入: num = -7
输出: "-10"
提示:
- -10^7 <= num <= 10^7
二、思路分析:
首先需要清楚进制之间的转化方式,以十进制转化为二进制为例:假设将十进制100转为二进制
100/2=50......0;
50/2=25......0;
25/2=12.....1;
12/2=6......0;
6/2=3......0;
3/2=1......1;
1/2=0......1;
然后将余数从下往上读就是结果,即十进制100对应的二进制为1100100;
本题中为带符号的数,先转为正数,在进行上述操作,最后将符号加上即可。
ps:上述中,在倒数第二步时,商为1,已经小于要转的进制,可以不用进行后续操作,以下代码中体现。
三、AC 代码:
class Solution {
public String convertToBase7(int num) {
return covertBase(num, 7);
}
//进制转化
public String covertBase(int num, int base) {
int temp = Math.abs(num);
StringBuilder sb = new StringBuilder();
while(temp >= base) {
int digit = temp % base;
sb.append(digit);
temp /= base;
}
sb.append(temp);
if(num < 0) {
sb.append("-");
}
return sb.reverse().toString();
}
}
四、总结:
使用用最高进制值一份份计算,不涉及任何算法
乘数法是比较耗时,尤其除法,翻了翻题解,好像都是用了除法操作。
按照进制算法,可以用权位值,一份份的计算,速度必须会比除法快的多