【位运算和数学】——七进制(c++)

296 阅读1分钟

LC 七进制数

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

  1. 由于返回类型为string,选择string类型来做,另:当给定负整数时(-7),使用int类型不考虑转换进制时前置零的可能,会得到错误结果("-1",正确输出应为"-10")。
  2. 给定负整数时,先取绝对值,再加负号。
  3. 可用递归来解…
string convertToBase7(int num){
    bool s = false;
    if(num == 0){
        return "0";
    }
    if(num < 0){
        s = true;
        num = -num;
    }
    string ans;
    while(num > 0){
        ans.push_back(num % 7 + '0');
        num /= 7;
    }
    if(s){
        ans.push_back('-');
    }
    reverse(ans.begin(),ans.end());
    return ans;
}

递归解法

class Solution {
public:
    string convertToBase7(int num) {
        if (num < 0) return "-" + convertToBase7(-1 * num);
        if (num < 7) return to_string(num);
        return convertToBase7(num / 7) + to_string(num % 7);
    }
};

笔记:
将十进制数转成 XXX 进制数,需要对整数部分和小数部分分别转换。
对于整数部分,转换方式是将十进制数的整数部分每次除以 X 直到变成 0,并记录每次的余数反向遍历每次的余数即可得到 X 进制表示。
对于小数部分,转换方式是将十进制数的小数部分每次乘以 X 直到变成 0,并记录每次的整数部分正序遍历每次的整数部分即可得到 X 进制表示。