曆屆試題 Excel位址
原題位址
時間限制:1.0s 記憶體限制:256.0MB
送出此題
問題描述
Excel單元格的位址表示很有趣,它使用字母來表示列号。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
…
當然Excel的最大列号是有限度的,是以轉換起來不難。
如果我們想把這種表示法一般化,可以把很大的數字轉換為很長的字母序列呢?
本題目即是要求對輸入的數字, 輸出其對應的Excel位址表示方式。
樣例輸入
26
樣例輸出
Z
樣例輸入
2054
樣例輸出
BZZ
資料規模和約定
我們約定,輸入的整數範圍[1,2147483647]
峰值記憶體消耗(含虛拟機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入…” 的多餘内容。
注意:
main函數需要傳回0;
隻使用ANSI C/ANSI C++ 标準;
不要調用依賴于編譯環境或作業系統的特殊函數。
所有依賴的函數必須明确地在源檔案中 #include
不能通過工程設定而省略常用頭檔案。
送出程式時,注意選擇所期望的語言類型和編譯器類型。
------------------------------
笨笨有話說:
這有點像進制關系,又不完全是。好像末2位是以1當26,末3位是以1當26*26
歪歪有話說:
要是從字母序列轉數字還好點,倒過來有點麻煩,不過計算機跑得快啊。
import java.util.Scanner;
public class Exceldizhi {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] iA = new int[5000];
int n = in.nextInt();
int i = 1;
while (n != 0) {
if (n % 26 == 0) {
// +64轉大寫字母,+96轉小寫字母
iA[i] = 26 + 64;
n -= 1;
} else {
iA[i] = n % 26 + 64;
}
n /= 26;
i++;
}
for (int j = i - 1; j > 0; j--) {
System.out.print((char)iA[j]);
}
}
}
曆屆試題 Excel位址
原題位址
時間限制:1.0s 記憶體限制:256.0MB
送出此題
問題描述
Excel單元格的位址表示很有趣,它使用字母來表示列号。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
…
當然Excel的最大列号是有限度的,是以轉換起來不難。
如果我們想把這種表示法一般化,可以把很大的數字轉換為很長的字母序列呢?
本題目即是要求對輸入的數字, 輸出其對應的Excel位址表示方式。
樣例輸入
26
樣例輸出
Z
樣例輸入
2054
樣例輸出
BZZ
資料規模和約定
我們約定,輸入的整數範圍[1,2147483647]
峰值記憶體消耗(含虛拟機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入…” 的多餘内容。
注意:
main函數需要傳回0;
隻使用ANSI C/ANSI C++ 标準;
不要調用依賴于編譯環境或作業系統的特殊函數。
所有依賴的函數必須明确地在源檔案中 #include
不能通過工程設定而省略常用頭檔案。
送出程式時,注意選擇所期望的語言類型和編譯器類型。
------------------------------
笨笨有話說:
這有點像進制關系,又不完全是。好像末2位是以1當26,末3位是以1當26*26
歪歪有話說:
要是從字母序列轉數字還好點,倒過來有點麻煩,不過計算機跑得快啊。
import java.util.Scanner;
public class Exceldizhi {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] iA = new int[5000];
int n = in.nextInt();
int i = 1;
while (n != 0) {
if (n % 26 == 0) {
// +64轉大寫字母,+96轉小寫字母
iA[i] = 26 + 64;
n -= 1;
} else {
iA[i] = n % 26 + 64;
}
n /= 26;
i++;
}
for (int j = i - 1; j > 0; j--) {
System.out.print((char)iA[j]);
}
}
}