您的位置:首页 > 其它

Excel地址转换 Excel是最常用的办公软件。每个单元格都有唯一的地址表示。 比如:第12行第4列表示为:“D12”,第5行第255列表示为“IU5”。

2013-04-15 10:54 716 查看
/*Excel地址转换
【编程题】(满分21分)
Excel是最常用的办公软件。每个单元格都有唯一的地址表示。
比如:第12行第4列表示为:“D12”,第5行第255列表示为“IU5”。
事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址。
第12行第4列表示为:“R12C4”,第5行第255列表示为“R5C255”。
你的任务是:编写程序,实现从RC地址格式到常规地址格式的转换。
【输入、输出格式要求】
用户先输入一个整数n(n<100),表示接下来有n行输入数据。
接着输入的n行数据是RC格式的Excel单元格地址表示法。
程序则输出n行数据,每行是转换后的常规地址表示法。
例如:用户输入:
2
R12C4
R5C255
则程序应该输出:
D12
IU5
*/
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo03 {
// 计算出字母的个数
public static int checkCount(int n){
int count = 1;
while(true){
int t = (int)Math.pow(26, count);
if(n > t){
count++;
n -=  t;
}else{
return count;
}
}
}
// 添加余数对应的字母
public static char f(int n){
if(n==26){
return 'Z';
}else{
return (char)('A'-1+n%26);
}
}
// 计算结果
public static String fun(int Row,int Col){
StringBuffer sb = new StringBuffer();
int count = checkCount(Col);	// 计算出字母的个数
while(count>0){
if(Col%26==0){	//如果能除尽
// 例(702):702/26时(2余0) 应该分配成(1,26)
// 个位 加26('Z')时  就等于 十位上的2 去掉(1个26),(一个(个位的26)对应一个(十位的1))
// 修改n的值  2-1; n就等于1; 这时就分配成了(1,26);
sb.insert(0,'Z');	// 添加'Z'
Col = Col/26 -1;
}else{
sb.insert(0,f(Col));// 添加余数r对应的字母
Col /= 26;	// 修改 n 的值
}
count--;
}
sb.append(Row);	// RC地址后添加(行号)
return sb.toString();
}
// 输入数据
public static void input(String[] s){
Scanner scan = new Scanner(System.in);
int i = 0;
while(i<s.length){	// 输入n个数据
s[i++] = scan.nextLine();
}
}
// 拆分并计算结果
public static void splitOper(String[] s){
Pattern p = Pattern.compile("[0-9]+");	// 以数字做分隔
for(int i=0;i<s.length;i++){
Matcher m = p.matcher(s[i]);	// 得到所有数字
m.find();	// 得到第一个数字
int Row = Integer.parseInt(m.group());	// 取出第一个数字
m.find();	// 得到第二个数字
int Col = Integer.parseInt(m.group());	// 取出第二个数字
System.out.println(fun(Row,Col));	// 计算结果并输出
}
}
// 主函数
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("输入一个整数n(n<100)");
String[] s = new String[scan.nextInt()];
input(s);	// 输入数据
splitOper(s);	// 拆分并计算结果
}
}
运行结果:
输入一个整数n(n<100)
2
R12C4
R5C255
D12
IU5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐