1. 七进制数
题目:LeetCode504:504. 七进制数 - 力扣(LeetCode)
思路
进制转换,对几转换就是对几求余,最后将所有的余数反过来即可、如果num< 0,先取绝对值,再进行操作。
100转7进制的过程:
代码
public static String convert(int num){StringBuilder sb = new StringBuilder();//先拿到正负号,对其转换为正数boolean sign = num < 0;if (sign){num *= -1;}while (num > 0){sb.append( num%7 +"");num/=7;}if (sign)sb.append("-");return sb.reverse().toString();}
2. 进制的转换
题目
给定一个十进制数M,以及需要转换的进制数N,将十进制数转化为N进制数,M是32位整,2<= N <=16。
思路
需要处理的几个问题
- 进制数超过范围的时候出现A,B,C,D,E,F。我们可以定义长度大小为16的数组,保存2到16进制对应值的标记,赋值的时候只计算下标,不考虑不同进制的转换,
- 使用StringBuild完成字符串的反转。
- 用flag标记正负号,最后处理。
代码
//1.余数大于9的情况,public static final String[] F = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};public static String convertn(int M, int N){Boolean flag = false;if (M<0){flag = true;M *= -1;}StringBuffer sb = new StringBuffer();int temp;while (M != 0){//2.整除和取余,第一位余数先获取。temp = M%N;sb.append(F[temp]);M=M/N;}sb.reverse();return (flag?"-":"+") + sb;}
3. 补充
整数溢出问题
判断是否是大于最大32位整数,要从最大数/10开始判断,最大数是2147483647。
- 如果num>214748364,那么后面就不用再判断肯定溢出了,
- 如果num=214748364,需要跟最大数的末尾数字7对比,如果大于7,则溢出
- 如果num<214748364,则没问题继续处理
代码
if (num >Integer.MAX_VALUE / 10 || num == Integer.MAX_VALUE && num%10 > 7){return 0; }if (num < -Integer.MAX_VALUE / 10 || num == -Integer.MAX_VALUE && num%10 < -8){return 0;}