LeetCode 504. 七进制数

323 阅读2分钟

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);
}