zoukankan      html  css  js  c++  java
  • 【开发者笔记】进制转换

    需求:

      很简单的一个需求,就是:把1变成A,2变B,超过了Z就从A0开始,AA,AB,AC……

    原理:

      这就是一个实现【Integer.toHexString(123)】方法的问题,上述中输入字符串为123456789ABCDEF就是toHexString,输入字符串是1234567就是toOctalString,

      输入字符串是1就是toBinaryString。那么记录一下原理吧

      十进制转k进制的原则是整数部分除k取余,小数部分乘k取整

      那么用A-Z来表示数其实就是另类的27进制(26个字母+数字0),由于我们面对的只是整数,那么就讲A-Z存在一个字符串中,然后对数字进行除27取余,

      在用余数去找数组中对应的字符,然后存到一个StringBuilder里面,最后返回结果的时候reverse一下就ok了。

    边界条件考虑:

      0:那么直接返回0

      负数:先判断数字的符号,将符号存在一个sign变量里面,最后追加到StringBuilder中即可,然后把负数乘上-1当成正数来处理

      

    编码:

    package com.dyi.string;
    
    public class KBaseNumber {
    	public static void main(String[] args) {
    		for (int i = -100; i < 100; i++) {
    			System.out.print("" + i + "__十进制: "
    					+ parseKBase(i, "123456789".split("")));
    			System.out.print(",   " + "八进制: "
    					+ parseKBase(i, "1234567".split("")));
    			System.out.print(",   " + "16进制: "
    					+ parseKBase(i, "123456789ABCDEF".split("")));
    			System.out.print(",   " + "A-Z进制: " + parseKBase(i));
    			System.out.println(",   " + "二进制: " + parseKBase(i, "1".split("")));
    		}
    	}
    
    	public static String parseKBase(int num) {
    		String[] base = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
    		return parseKBase(num, base);
    	}
    
    	public static String parseKBase(int num, String[] base) {
    		if (num == 0) {
    			return "0";
    		}
    
    		int k = base.length;
    		String sign = num >= 0 ? "" : "-";
    		num = num >= 0 ? num : -num;
    		StringBuilder result = new StringBuilder();
    
    		while (num > 0) {
    			int idx = num % k;
    			num = num / k;
    			if (idx == 0) {
    				result.append("0");
    			} else {
    				result.append(base[idx]);
    			}
    		}
    		result.append(sign);
    		return result.reverse().toString();
    	}
    }
    

      

    结果:

     

     

     

     

     

     

     

     

    朋友问的问题,顺手记录一下~

  • 相关阅读:
    NYOJ题目100 1的个数
    NYOJ题目98成绩转换
    NYOJ题目97兄弟郊游问题
    NYOJ题目96 n-1位数
    NYOJ题目77开灯问题
    NYOJ题目75日期计算
    NYOJ题目74小学生算术
    NYOJ题目65另一种阶乘问题
    NYOJ题目64鸡兔同笼
    NYOJ题目62笨小熊
  • 原文地址:https://www.cnblogs.com/wyongbo/p/8078591.html
Copyright © 2011-2022 走看看