柰茶 2019-03-07 23:51 采纳率: 0%
浏览 618
已采纳

如何解决数组的空间不足的问题

  • 在一个进制转换的问题上卡了很久,十六进制转八进制,我是想先将十六进制转换成十进制,再将十进制转换成八进制。十六进制转十进制我可以很好实现,就是将字符串逐一取出求出权值就行。问题在十进制转八进制上。因为在数学上,

  • 十进制转八进制就是该数求余再倒序,问题就出在这。

  • 为实现将数倒序,我得先将数放在数组里,再将数组进行逆向输出。可是数组是创建时就初始化好空间大小的,当所转换的数非常大时数组都无法满足时就错了,想请问是否有更好的方法解决?或者当数组的使用遇到空间上的问题是有没有什么好的处置方法?求教~~~

以下献上十六进制转八进制代码(请大家对我的代码多多指正,初学者比较生疏,谢谢~):

//多次运算十六进制转八进制
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;
        }
    }
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-03-08 08:17
    关注

    你可以用 ArrayList,不用考虑长度,用add动态添加,最后一次性
    for (int i = al.length - 1; i >= 0; i--) 逆序遍历 a;[i];
    单个数字转换内存不足有点夸张了,你的数字能有多大?100位?1000位?宇宙中的所有原子的个数应该也没有10的1000次方。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题