首页 > 其他 > 详细

BASIC-12 十六进制转八进制

时间:2017-02-12 21:26:30      阅读:219      评论:0      收藏:0      [点我收藏+]
  基础练习 十六进制转八进制  
时间限制:1.0s   内存限制:512.0MB
 

   

 
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。
 
 
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int j = 0; j < t; j++) {
            String str = sc.next();
            int len = str.length();
            int[] binary = new int[100000 * 4 + 10];
            for (int i = 0; i < len; i++) {
                String string = hexadecimalToBinary(str.charAt(i));
                binary[i * 4 + 0] = string.charAt(0) - ‘0‘;
                binary[i * 4 + 1] = string.charAt(1) - ‘0‘;
                binary[i * 4 + 2] = string.charAt(2) - ‘0‘;
                binary[i * 4 + 3] = string.charAt(3) - ‘0‘;
            }

            int llen = 4 * len;
            StringBuilder ans = new StringBuilder();
            ans.append("");
            if (llen % 3 == 0) {
                for (int i = 0; i < llen / 3; i++) {
                    String string = binaryToOctonary(binary[3 * i], binary[3 * i + 1], binary[3 * i + 2]);
                    ans.append(string);
                }
            } else if (llen % 3 == 1) {
                int temp = binary[0];
                if (temp != 0)
                    ans.append("1");
                for (int i = 0; i < llen / 3; i++) {
                    String string = binaryToOctonary(binary[3 * i + 1], binary[3 * i + 2], binary[3 * i + 3]);
                    ans.append(string);
                }
            } else {
                int temp = binary[0] * 2 + binary[1];
                if (temp != 0)
                    ans.append(temp);
                for (int i = 0; i < llen / 3; i++) {
                    String string = binaryToOctonary(binary[3 * i + 2], binary[3 * i + 3], binary[3 * i + 4]);
                    ans.append(string);
                }
            }
            int l = 0;
            l = ans.length();
            if (ans.charAt(0) == ‘0‘) {
                System.out.println(ans.substring(1));
            } else {
                System.out.println(ans);
            }
        }
        sc.close();
    }

    private static String binaryToOctonary(int i, int j, int k) {
        return (4 * i + 2 * j + 1 * k) + "";
    }

    private static String hexadecimalToBinary(char c) {
        String str = null;
        switch (c) {
        case ‘0‘:
            str = "0000";
            break;
        case ‘1‘:
            str = "0001";
            break;
        case ‘2‘:
            str = "0010";
            break;
        case ‘3‘:
            str = "0011";
            break;
        case ‘4‘:
            str = "0100";
            break;
        case ‘5‘:
            str = "0101";
            break;
        case ‘6‘:
            str = "0110";
            break;
        case ‘7‘:
            str = "0111";
            break;
        case ‘8‘:
            str = "1000";
            break;
        case ‘9‘:
            str = "1001";
            break;
        case ‘A‘:
            str = "1010";
            break;
        case ‘B‘:
            str = "1011";
            break;
        case ‘C‘:
            str = "1100";
            break;
        case ‘D‘:
            str = "1101";
            break;
        case ‘E‘:
            str = "1110";
            break;
        case ‘F‘:
            str = "1111";
            break;
        }
        return str;
    }
}

这题思路很清晰,就是把十六进制的数(字符串)转化为二进制,在把二进制转换为八进制。

但是感觉被坑了一下,就是在输入的是后,sc.next()和sc.nextLine---

以前在写c/c++的时候就被坑过(printf什么的),所以一开始写的sc.nextLine,导致我的substring一直报错、、、

哎、刚刚学Java,什么具体的知识点感觉都不太清楚,还要多多看书和实验

BASIC-12 十六进制转八进制

原文:http://www.cnblogs.com/huanhuan10/p/6391690.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!