Excel 单元格地址有两种格式:
普通格式,如:A5, BC12
对应的RC格式:R5C1, R12C55
显然,RC格式是直接给出行号和列号
请编程在两种地址格式间转换。
这道题是对Java蓝桥杯中的一道题进行的扩展,首先需要找出两种格式之间的关系,通过观察可以发现,A5-->R5C1,A表示的是列号1(A,B,C......Z分别代表1,2,3......26),5代表行号5,BC代表的是列号是2×26+3=55,12代表行号12,所以BC12-->R12C55,这道题实质上就是一道进制转换的题,关键在于BC和55之间的转换。
下面附上我写的代码:
package class2;
public class C {
public static void main(String[] args) {
String s1="R12C55";
String s2="BC12";
func1(s2);//BC12-->R12C55
func2(s1);//R12C55-->BC12
}
public static void func1(String s){ //BC12-->R12C55
int row=0;
int col=0;
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c>='A'&&c<='Z'){
col=col*26+(c-'A'+1);
}else{
row=row*10+(c-'0');
}
}
System.out.println("R"+row+"C"+col);
}
public static void func2(String s){ //R12C55-->BC12
int row=0;
int col=0;
int a=s.indexOf('R');
int b=s.indexOf('C');
for(int i=a+1;i<b;i++){
char c=s.charAt(i);
row=row*10+(c-'0'); //得到行号
}
for(int j=b+1;j<s.length();j++){
char c=s.charAt(j);
col=col*10+(c-'0'); //得到列号
}
String s2="";
for(;;){
if(col==0) break;
s2=(char) ('A'+col%26-1)+s2;
col/=26;
}
System.out.println(s2+row);
}
}
许庭洲 发表于 2014-4-24 20:45
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |