我知道将任何进制转换为任何进制都是简单而可行的。首先将任何进制转换为十进制,然后再将十进制转换为任何其他进制。但是,我曾经将范围从2到36的进制进行过转换,但从2到46的进制我从未尝试过。
我不明白在36之后该放什么,因为36代表字母'z'(1-10是十进制数字,然后是26个字母)。
请解释一下36之后会发生什么。
我不明白在36之后该放什么,因为36代表字母'z'(1-10是十进制数字,然后是26个字母)。
请解释一下36之后会发生什么。
一种base 60系统使用这些符号:
因此,使用的符号是任意的。除了您的系统之外,36之后没有任何特殊含义。
在64进制中,我们有(26+26+10+2)64个符号来表示数字,因此我们可以用64进制表示任何数字。同样,在更高的进制中,他们使用不同的符号来表示。
数字系统让你可以像上帝一样创造规则。
你需要了解的是,符号是完全任意的。并不存在一个“36之后应该是什么”的神圣规定。你可以自由定义任何你想要的规则。
要用某个进制编码数字,你只需要以下几点:
自然地,有无限的可能性来为某个进制创建这样的符号表:
Θ
ェ
す
)
0
・
_
o
や
ι
Θ
代表零元素,ェ
代表一元素,依此类推。
0、1、2、3、4、5、6、7、8、9
就是一个约定,十六进制、二进制等用到的符号也都是约定。通常人们会就每种进制使用什么符号表达达成共识,这也是为什么我们能读懂别人写下来的数字的原因。这是我编写的完整代码,希望能对您有所帮助。
import java.util.Scanner;
/*
* author : roottraveller, nov 4th 2017
*/
public class BaseXtoBaseYConversion {
BaseXtoBaseYConversion() {
}
public static String convertBaseXtoBaseY(String inputNumber, final int inputBase, final int outputBase) {
int decimal = baseXToDecimal(inputNumber, inputBase);
return decimalToBaseY(decimal, outputBase);
}
private static int baseXNumeric(char input) {
if (input >= '0' && input <= '9') {
return Integer.parseInt(input + "");
} else if (input >= 'a' && input <= 'z') {
return (input - 'a') + 10;
} else if (input >= 'A' && input <= 'Z') {
return (input - 'A') + 10;
} else {
return Integer.MIN_VALUE;
}
}
public static int baseXToDecimal(String input, final int base) {
if(input.length() <= 0) {
return Integer.MIN_VALUE;
}
int decimalValue = 0;
int placeValue = 0;
for (int index = input.length() - 1; index >= 0; index--) {
decimalValue += baseXNumeric(input.charAt(index)) * (Math.pow(base, placeValue));
placeValue++;
}
return decimalValue;
}
private static char baseYCharacter(int input) {
if (input >= 0 && input <= 9) {
String str = String.valueOf(input);
return str.charAt(0);
} else {
return (char) ('a' + (input - 10));
//return ('A' + (input - 10));
}
}
public static String decimalToBaseY(int input, int base) {
String result = "";
while (input > 0) {
int remainder = input % base;
input = input / base;
result = baseYCharacter(remainder) + result; // Important, Notice the reverse order here
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter : number baseX baseY");
while(true) {
String inputNumber = scanner.next();
int inputBase = scanner.nextInt();
int outputBase = scanner.nextInt();
String outputNumber = convertBaseXtoBaseY(inputNumber, inputBase, outputBase);
System.out.println("Result = " + outputNumber);
}
}
}