Excel地址轉換 Excel是最常用的辦公軟體。每個單元格都有唯一的地址表示。 比如:第12行第4列表示為:“D12”,第5行第255列表示為“IU5”。
阿新 • • 發佈:2019-01-27
執行結果:/*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