504. 七进制数(简单)
方法一:七进制数预处理
思路
这里我利用了提示,得知 |num| <= 10^7
,因此所使用到的七进制数肯定也小于等于 107 ,我将 7 的次方数算出来,预存在数组 seven 中。
后续计算的时候可以直接比较 num
和 seven[i]
,不过对于这道题,只计算一次 num ,差别应该不大。
需要注意的地方
- 首先,对于
num==0
的情况,直接返回"0"
; - 如果
num < 0
,则设置minus=true
,表示当前数字是负数;负数和正数的七进制数的绝对值相等,只相差了一个负号,因此返回最终结果的时候,判断minus
,如果minus = true
,则在将"-"
和答案字符串拼接。 - 此外,为了防止前导 0 ,我还设置了一个标记
flag
,用来表示是否已经存入了非 0 的数字。
代码
class Solution {
public:
string convertToBase7(int num) {
if(num == 0) return "0";
string ans;
// 将数字预存
vector<int> seven(9);
seven[0] = 1;
for(int i=1; i<=8; ++i){
seven[i] = seven[i-1] * 7;
}
// seven[8] = 5764801;
bool flag = false;
bool minus = false;
if(num < 0) minus = true;
num = abs(num);
for(int i=8; i>=0; --i){
int cnt = 0;
while(num >= seven[i]){
num -= seven[i];
++cnt;
flag = true; // 去除前导0
}
if(flag){
ans.push_back(cnt + '0');
}
}
return minus ? "-" + ans : ans;
}
};
方法二:进制数模板
思想
代码
class Solution {
public:
string convertToBase7(int num) {
if(num == 0) return "0";
string ans;
bool flag = false;
bool minus = false;
if(num < 0){
minus = true;
num = -num;
}
int a, b;
while(num){
a = num / 7, b = num % 7;
ans = to_string(b) + ans;
num = a;
}
return minus ? "-" + ans : ans;
}
};