概述
504. 七进制数
思路:给定一个整数,将其转化为7进制,并以字符串形式输出。看到这一题我的第一反应是本身存在一个这样的方法可以直接调用:
Integer.toString(num, 7);
但是很多人可能并不记得这个方法或者题目中要求不可以使用这个方法,那么我们可以回忆如何将十进制转换为二进制的,就是不断地对2取余然后再除以2,这样不断的循环,那么7进制数也是同样的道理,我们使用StringBuilder来存储最终结果,但是需要注意的是,我们每次算出的数字是需要加在原字符串的前端的,所以我们使用insert方法插入到指定位置,并且我们需要保存数字的符号:
public String convertToBase7(int num) {
if(num == 0) return "0";
boolean flag = num < 0;
num = Math.abs(num);
StringBuilder sb = new StringBuilder();
while(num != 0){
sb.insert(0, num % 7);
num /= 7;
}
return flag == true ? "-" + sb.toString() : sb.toString();
}
405. 数字转换为十六进制数
思路:与上一题类似,区别是负数要用它的补码形式。
Input:
26
Output:
"1a"
Input:
-1
Output:
"ffffffff"
最开始我是这么写的:
public String toHex(int num) {
if(num==0) return "0";
char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
boolean flag = num>0? true:false;
num = Math.abs(num);
StringBuilder sb = new StringBuilder();
while(sb.length()<8&&num!=0){
sb.append(chars[num%16]);
num>>=4;
}
return flag == true? sb.reverse().toString():"-"+sb.reverse().toString();
}
结果输入-1我的输出为“-1”,而预期输出是"ffffffff",因为负数要用它的补码形式,因为考虑的是补码形式,因此符号位就不能有特殊的意义,需要使用无符号右移,左边填 0。其中取余可以使用与0b1111进行与运算即可,记得最后需要取反:
public String toHex(int num) {
char[] chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
if (num == 0) return "0";
StringBuilder sb = new StringBuilder();
while (num != 0) {
sb.append(chars[num & 0b1111]);
num >>>= 4;
}
return sb.reverse().toString();
}
405. 数字转换为十六进制数
思路:注意这里是从 1 开始计算的,而不是从 0 开始,因此需要对 n 执行 -1 操作,方法和上面两题基本一致。
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
public String convertToTitle(int n) {
if(n<1) return "";
StringBuilder sb = new StringBuilder();
while(n!=0){
n--;
sb.append((char)(n%26+'A'));
n = n/26;
}
return sb.reverse().toString();
}
最后
以上就是虚幻春天为你收集整理的力扣解题思路:进制转换的全部内容,希望文章能够帮你解决力扣解题思路:进制转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复