在一个进制转换的问题上卡了很久,十六进制转八进制,我是想先将十六进制转换成十进制,再将十进制转换成八进制。十六进制转十进制我可以很好实现,就是将字符串逐一取出求出权值就行。问题在十进制转八进制上。因为在数学上,
十进制转八进制就是该数求余再倒序,问题就出在这。
为实现将数倒序,我得先将数放在数组里,再将数组进行逆向输出。可是数组是创建时就初始化好空间大小的,当所转换的数非常大时数组都无法满足时就错了,想请问是否有更好的方法解决?或者当数组的使用遇到空间上的问题是有没有什么好的处置方法?求教~~~
以下献上十六进制转八进制代码(请大家对我的代码多多指正,初学者比较生疏,谢谢~):
//多次运算十六进制转八进制
import java.util.*;
public class BASIC_12_3_3 {
public static void main(String args[]){
int n,tag=0;
long sum=0,b,tmp=1,k,c;
String H[] = new String[11];
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i=0;i < n;i++){
H[i] = sc.next();
}
for(int z=0;z < n;z++){
int i = 0;
//十六进制转成十进制
for(int j=H[z].length()-1;j >= 0;j--){
b = H[z].charAt(j);
if(b>='0' && b<='9'){
b = (b - '0') * tmp;
sum = sum + b;
tmp = tmp * 16;
}
else if(b>='A' && b<='F'){
b = (b - 'A' + 10) * tmp;
sum = sum + b;
tmp = tmp * 16;
}
}
//此处得出该数的十进制sum,以下是十进制转八进制
if(sum>=0 && sum<8){
System.out.print(sum);
}
else if(sum >= 8){
k = sum;
long list[] = new long[20];//此处用数组进行逆序输出,但容易出现数据溢出
while(k != 0){
c = k % 8;
list[i] = c;
k = k / 8;
i ++;
}
if(k == 0){
list[i] = k;
}
//以上数制转换完毕,以下是进行逆向输出
for(int j=list.length - 1;j >= 0;j--){
if(list[j] == 0){
}else if(list[j] != 0){
tag = 1;
}
if(tag == 1){
System.out.print(list[j]);
}
}
System.out.println();
}
sum = 0;//sum置零!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
tag = 0;
tmp = 1;
}
}
}