蓝桥杯 十六进制转八进制

来源:互联网 发布:java多线程计算器 编辑:程序博客网 时间:2024/05/14 16:03

最近在做蓝桥杯上的算法题的时候,觉得有一些东西需要自己小结一下,方便以后查阅。

首先,在java里有专门的函数可以调用,将十六进制转化为八进制。我试了一下在我的eclipse运行ok了,但是提交到蓝桥杯的评测系统上就是通不过。以下是代码:

public static void main(String[] args){Scanner scan =  new Scanner(System.in);int n=scan.nextInt();String[] array1 = new String[n];String[] array2 = new String[n];for(int i=0;i<array1.length;i++){String m=scan.next();array1[i]=m;}for(int i=0;i<array2.length;i++){array2[i]=Long.toOctalString(Long.parseLong(array1[i],16));System.out.println(array2[i]);}}   


后来发现与题目要求不符,然后又想了另外一种方法:

static int  fun(String s){    int n = s.length();    int sum =0,a=1;    for(int i =n-1;i>=0;i--){        char b =s.charAt(i);        if(b >='0'&&b<='9')        sum =sum+(b-'0')*a;        else         if(b>='A'&&b<='F')        sum+=(b+10-'A')*a;        a=a*16;    }    return sum;    }     public static void fun8(int x){     Stack<Integer> st =new Stack<Integer>();     while(x>0){     st.push(x%8);     x=(int)(x/8);     //注意:x为int类型  取整后为零     }     while(!st.isEmpty()){     System.out.print(st.peek());     st.pop();     }     System.out.println();     }     public static void main(String[] args){     Scanner sc = new Scanner(System.in);     int n =sc.nextInt();    String[] array1=new String[n];    int[] x =new int[n];    for(int i =0;i<array1.length;i++){    String m =sc.next();    array1[i] = m;    }      for(int i=0;i<array1.length;i++)      {      x[i] =fun(array1[i]);      }      for(int i=0;i<array1.length;i++)      fun8(x[i]);     }

第二种方法先把十六进制转化为十进制(fun()函数)然后再用了栈来存放每一位十进制转换为八进制(fun1()函数)的数据。

while(!st.isEmpty()){     System.out.print(st.peek());     st.pop();

此处栈的操作起初我也没搞明白,后来想想。应该是这样理解的:st.peek()函数即指向栈顶数据,然后打印出栈顶数据。st.pop()弹栈函数把栈顶数据弹出栈,判断栈非空则继续打印出新的栈顶数据,直到栈为空。

0 0