十六进制转八进制

来源:互联网 发布:淘宝网店网页制作 编辑:程序博客网 时间:2024/06/08 14:10
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式
  输出n行,每行为输入对应的八进制正整数。

  【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示

  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

import java.util.Scanner;import java.util.Stack;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        String[] strings = new String[n];        for (int i = 0; i < n; i++) {            strings[i] = sc.next();        }        for (String string : strings) {            if (string.equals("0")) {                System.out.println(0);            } else {                convert16To8(string);            }        }    }    static void convert16To8(String n) {        StringBuffer sb = new StringBuffer();        for (int i = 0; i < n.length(); i++) {            sb.append(convert16To2(n.charAt(i)));// 把16进制数的每一位转换成四位2进制数字        }        Stack<String> stack = new Stack<>();        for (int i = sb.length(); i >= 0; i -= 3) {            int start = i - 3 >= 0 ? i - 3 : 0;            String temp = sb.substring(start, i);            stack.add(convert2To8(temp));// 从后向前每三位2进制数字转换成一位8进制数字,存储在栈中。        }        while (stack.peek().equals("0")) {            stack.pop();// 删除前面的多余的0        }        while (!stack.isEmpty()) {            System.out.print(stack.pop());        }        System.out.println();    }    static String convert16To2(char c) {        int temp = c >= 'A' ? c - 'A' + 10 : c - '0';        int[] a = new int[4];        int i = 0;        for (; i < a.length; i++) {            a[i] = temp % 2;            temp /= 2;        }        i--;        StringBuffer sb = new StringBuffer();        for (; i >= 0; i--) {            sb.append(a[i]);        }        return sb.toString();    }    static String convert2To8(String str) {        int result = 0;        for (int i = 0; i < str.length(); i++) {            result += Math.pow(2, str.length() - 1 - i) * (str.charAt(i) - '0');        }        return result + "";    }}


0 0
原创粉丝点击