Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
给定一个整数
num,将其转化为 7 进制,并以字符串形式输出。
此题需要将一个整数转为7进制的字符串,那么首先我们就需要知道如何将一个十进制的整数转为7进制。
以十进制数100为例,首先让100除以7:
100 / 7 = 14...2
商为14,余数为2;再让14除以7:
14 / 7 = 2...0
商为2,余数为0;最后让2除以7:
2 / 7 = 0...2
商为0,余数为2;此时从下往上将所有余数拼接起来,得到202,这就是100的7进制。
再来看看作为负数的情况,以十进制数-7为例,仍然先让-7除以7:
-7 / 7 = -1...0
得到商为-1,余数为0,;再让-1除以7:
-1 / 7 = 0...-1
此时商为0,余数为-1,拼接起来为-10,但若是出现多个余数为负数的情况,直接拼接起来显然不对,还需要考虑去掉一些负号的问题。
既然如此,我们直接将负数作为正数考虑,比如这里的-10,我们将其看成正数10进行计算,得到7进制10,最后再前面加上一个负号即可。
代码如下:
public static String convertToBase7(int num) {
// 若为0,无需转换
if (num == 0) {
return "0";
}
int temp = num;
// 将负数作为正数处理
temp = Math.abs(temp);
StringBuilder sb = new StringBuilder();
while (temp > 0) {
// 取余数
sb.append(temp % 7);
temp /= 7;
}
if (num < 0) {
// 若为负数,加上负号
sb.append('-');
}
// 最后反转sb即可得到7进制
return sb.reverse().toString();
}
还有一种投机取巧的办法,在Java中,Integer类提供了toString方法来方便地转换进制,代码如下:
public static String convertToBase7(int num) {
return Integer.toString(num,7);
}