2.3进制转换
使用int存一个整数时,内存中是用二进制存储的,当要显示的时候,用十进制显示。
任意进制间的转换
n进制转m进制
String s = “2001201102”
3进制转换为5进制
先转换为2进制,再转换为5进制
/*
任意进制间的转换
n进制转m进制
String s = “2001201102”
3进制转换为5进制
先转换为10进制,再转换为5进制
*/
package BinaryTrans;
public class NToM {
public static void main(String[] args) {
String s = "2001201102";//三进制的一个串
int STARTSystem = 3;
int ENDSystem = 5;
//把三进制的串转换为真值,并且用十进制显示
int n = 0;
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
n = n*STARTSystem + (c -'0');//将三进制转换为十进制,十位:以一当三
}
/* n=14235;
n % 10 -->5
n = n/10;
n % 10 -->3
n = n/10
......*/
String s2 = "";
while(true){
s2 = n%ENDSystem + s2;//五进制转换
n = n/ENDSystem;
if(n==0) break;
}
System.out.println(s2);
}
}
2244434
Excel单元格转换
Excel 单元格地址有两种格式:
普通格式,如:A5, BC12
对应的RC格式:R5C1, R12C55
显然,RC格式是直接给出行号和列号
请编程在两种地址格式间转换。
/*
Excel单元格转换
Excel 单元格地址有两种格式:
普通格式,如:A5, BC12
对应的RC格式:R5C1, R12C55
显然,RC格式是直接给出行号和列号
请编程在两种地址格式间转换。
*/
public class ExcelTranslation {
public static void main(String[] args) {
String s = "BC12";
System.out.println(s);
System.out.println(normalToRC(s));
String s2 = "R5C1";
System.out.println(s2);
System.out.println(RCToNormal(s2));
}
//RC模式转为普通模式
public static String RCToNormal(String s){
s=s.substring(1);//将开头的R去掉
String ss[] = s.split("C");//用C分割串
int column = Integer.valueOf(ss[1]);//将列号转换为真值(十进制)
String s2 = "";
while(true){
s2 = (char)(column%26 + 64) + s2;//转回26进制,输出char类型字母
column = column/26;
if(column==0) break;
}
String result = s2+ss[0];
return result;
}
//普通模式转为RC模式
public static String normalToRC(String s){
int start_digit = 0;//数字的初始位置
for(int i=0;i<s.length();i++){//遍历串,找到分割点
if(Character.isDigit(s.charAt(i))){//得到出现数字的位置i
start_digit=i;
break;//跳出,避免第二次又出现数字
}
}
String column = s.substring(0, start_digit);//得到字母,即列号(二十六进制)
String row = s.substring(start_digit);//得到数字,行号
//将二十六进制转换为十进制
int n=0;
for(int i=0;i<column.length();i++){
char c = column.charAt(i);//得到每一个字母
n = n*26 + (c-64);//将二十六进制转换为十进制,'A'-64=1
}
String resultRC = "R"+row+"C"+n;
return resultRC;
}
}
BC12
R12C55
R5C1
A5