【刷题打卡】504. 七进制数

157 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

504. 七进制数

给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。

示例 1:

输入: num = 100
输出: "202"

示例 2:

输入: num = -7
输出: "-10"

提示:

  • -10^7 <= num <= 10^7

二、思路分析:

先找到最小的大于 num 的7的幂次,退一步就是最大的不大于 num 的7的幂。那么就找到了num 对应七进制数的位数。

对于 num = 100,先找到最小的大于100的7的幂次即 343,退一步除以7即 49就是最大的不大于100的7的幂次。49 以七进制表示即 100, num的位数与其相等。

然后从高位到低位依次获取每位上的数字即可,不用再对结果进行反转。

btw,注意一些边界条件的处理。

三、AC 代码:

class Solution {
public:
    string convertToBase7(int num) {
        if(num == 0){
            return "0";
        }
        stringstream res;
        if(num < 0){ // 负数特殊处理
            num = abs(num);
            res << "-";
        }
        int t = 1; // 底数
        while(t <= num){ // 找到最小的大于num的7的幂次
            t *= 7;
        }
        t /= 7; // 退一步,就是最大的不大于num的7的幂次
        while(t){ // 从高到低依次获得每位数字
            res << num / t; // 当前位加入结果
            num %= t; 
            t /= 7;
        }
        return res.str();
    }
};

四、总结:

官方的题解是倒推 + 迭代,感兴趣的也可以区研究下,一堆的公式证明。

范文参考:

【微扰理论】逐位取模解决经典进制转化问题 - 七进制数 - 力扣(LeetCode) (leetcode-cn.com)