หากใครสังเกต column header ของ excel หรือ spread sheet อื่นๆแล้วจะพบว่า column header จะเป็นตัวอักษรแทนที่จะเป็นตัวเลขเหมือนกับ row header เช่น A, B, C, ..., Z, AA, ...
โจทย์คือหากต้องการเขียน function ที่รับค่า column header เหล่านี้เป็น input parameter แล้วให้คืนค่ากลับออกมาเป็นตัวเลขแทนจะทำอย่างไร
แนวคิดของข้อนี้คือ หลักการแปลงเลขฐานต่างๆให้กลับมาเป็นเลขฐาน 10 ครับ
ตอบลบหากทุกคนยังจำได้การเปลี่ยนเลขฐานต่างๆให้เป็นเลขฐาน 10 จะใช้หลักการคือ
ตอบลบผลรวมของ ค่าหลัก10ประจำหลักต่าง x (ฐานยกกำลังเลขประจำหลัก)
โดยที่เลขประจำหลักเริ่มจาก 0 งง ม่ะ ???
ตัวอย่างเช่น 0101 ฐานสองเปลี่ยนให้เป็นฐาน 10 ได้ดังนี้
0x(2^3) + 1x(2^2) + 0x(2^1) + 1x(2^0) = 0 + 4 + 0 + 1 = 5
ดังนั้นเมื่อ column header จึงมองเป็นเลข,ฐาน 26 ก็จะได้เป็น
public static final int ALPHA_A = 65;
public static int toInt(String a){
char[] ch = a.toCharArray();
int result = 0;
int index = 0;
for(int i=ch.length-1;0<=i;i--){
result+= ((int)(ch[i]-ALPHA_A)+1)*(Math.pow(26,index));
index++;
}
return result;
}
!!ข้อจำกัดของ function นี้คือต้องเป็นตัวพิมพ์ใหญ่เท่านั้น