【开发者笔记】进制转换

简介: 需求:   很简单的一个需求,就是:把1变成A,2变B,超过了Z就从A0开始,AA,AB,AC…… 原理:   这就是一个实现【Integer.toHexString(123)】方法的问题,上述中输入字符串为123456789ABCDEF就是toHexString,输入字符串是1234567就是toOctalString,   输入字符串是1就是toBinaryString。

需求:

  很简单的一个需求,就是:把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();
	}
}

  

 

结果:

 

 

 

 

 

 

 

 

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

 

黑夜给了我黑色的眼睛,我却用它寻找光明
目录
相关文章
|
9天前
|
算法 C语言 数据安全/隐私保护
【C 言专栏】C 语言中的位运算技巧
【5月更文挑战第2天】探索C语言中位运算的威力:高效处理标志位、数据压缩、加密及特定算法实现。了解位与(&)、或(|)、异或(^)、取反(~)和移位操作。通过示例代码学习判断奇偶、提取、设置和清除位。注意边界条件和可读性,利用位运算提升性能,结合位图和算法实现更多功能。掌握这些技巧,优化你的C语言编程。
【C 言专栏】C 语言中的位运算技巧
|
2月前
|
算法 C++
探索C/C++ 进制转换之美:从原理到应用(三)
探索C/C++ 进制转换之美:从原理到应用
30 0
|
2月前
|
存储 网络协议 算法
探索C/C++ 进制转换之美:从原理到应用(二)
探索C/C++ 进制转换之美:从原理到应用
44 0
|
2月前
|
存储 算法 程序员
探索C/C++ 进制转换之美:从原理到应用(一)
探索C/C++ 进制转换之美:从原理到应用
31 0
|
4月前
|
数据处理 C语言
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
47 0
|
11月前
|
存储 C语言
【C语言_复习_学习第二课】什么是进制?进制之间应该如何转换
什么是进制?在我们的生活中处处充满进制,一天是24个小时、一个小时是60分钟、一分钟是60秒、一个星期一共7天........还有大家听说过半斤八两这个词语吗?也就是说买半斤东西也就是八两,一斤也就是十六两,满16进一位这就是十六进制。我今天就当一次小学老师来考考你,5+8等于多少(我没有在和大家开玩笑)你会说等于13,你的回答就是十进制也就是满十进一,而在计算机中数字都是以二进制(只有1和0)存储的也就是满二进一位,当然也有八进制(从0到7)、十六进制(从0到F)都是类似的,八进制满八进一位,十六进制满十六进一位(其中十六进制10用A来表示,11-B、12-C、13-D、14-E、15-F)
81 0
|
11月前
|
C语言
【C语言_学习_考试_复习第三课】ASCII码与C语言概述
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编程系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符 00000000B-11111111B 0-127一共128个编码
71 0
|
人工智能
深入浅出详解进制转换
深入浅出详解进制转换
深入浅出详解进制转换
|
算法 Java
进制转换(二) - 进阶
进制转换(二) - 进阶
112 0
进制转换(二) - 进阶