进制-Iterative-进制转换

2019-12-02 21:15:31

进制转换是计算机科学里的一个基础算法,通常可以使用如下的模版来进行计算。

下面我们来讨论一些关于进制的题目。

  • 1271. Hexspeak 

问题描述:

 

问题求解

    public String toHexspeak(String num) {
        StringBuffer sb = new StringBuffer();
        char[] chs = new char[]{'A', 'B', 'C', 'D', 'E', 'F'};
        long n = Long.valueOf(num);
        while (n > 0) {
            int d = (int)(n % 16);
            if (d == 1) sb.append("I");
            else if (d == 0) sb.append("O");
            else if (d > 1 && d <= 9) return "ERROR";
            else sb.append(chs[d - 10]);
            n = n / 16;
        }
        return sb.reverse().toString();
    }

 

  • 504. Base 7

问题描述

问题求解

    public String convertToBase7(int num) {
        if (num == 0) return "0";
        StringBuffer sb = new StringBuffer();
        boolean flag = num >= 0;
        num = num >= 0 ? num : -num;
        while (num > 0) {
            int d = num % 7;
            sb.append(d);
            num = num / 7;
        }
        return flag ? sb.reverse().toString() : "-" + sb.reverse().toString();
    }

 

  • 1017. Convert to Base -2

问题描述

问题求解

在计算机科学中,在对负数取余数的时候,当除数和被除数都是负数的时候,得到的余数也将是负数

-3 / -2 = 1    -3 % -2 = -1
3 / -2 = -1    3 % -2 = 1

在本题中需要所有的余数都是正数的,所以在计算的时候做了一些trick变换。

    public String baseNeg2(int N) {
        if (N == 0) return "0";
        StringBuffer sb = new StringBuffer();
        while (N != 0) {
            int d = N % -2;
            if (d == -1) {
                sb.append(1);
                N = N / -2 + 1;
            }
            else {
                sb.append(d);
                N = N / -2;
            }
        }
        return sb.reverse().toString();
    }

  

 

posted @ 2019-12-02 21:16  hyserendipity  阅读(155)  评论(0编辑  收藏  举报