Excel 单元格的地址表示很有趣,它使用字母来表示列号。比如:
A 表示第1列,
B 表示第2列,
Z 表示第26列,
AA 表示第27列,
AB 表示第28列,
BA 表示第53列,
···
当然 Excel 的最大列号是有限度的,所以转换起来不难。如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?本题目即是要求对输入的数字, 输出其对应的 Excel 地址表示方式。
输入描述
输入一个整数n,其范围是[1,2147483647]
输出描述
输出n对应的Excel地址表示方式。
输入输出样例
输入
26
输出
Z
输入
27
输出
AA
整体思路:可以把这个题目看成是一个26进制的转换,再将数字转成26个大写字母字符拼接起来就好了,26个大写字母就能表示从0到25这26个数,所以在取余的时候就是mod26,再去将确认的位置除去,计算写一个位置,直到整个数等于0。
python题解
import os
import sys
# 请在此输入您的代码
n = int(input())
result = ""
while n > 0:
m = (n-1)%26
result = chr(m+65) + result
n = (n-1)//26
print(result)
Java题解
import java.util.Scanner;
public class Main {
public static void main(String[] args)throws Exception{
Scanner input = new Scanner(System.in);
int n = input.nextInt();
input.close();
String result = "";
while(n>0){
int m = (n-1)%26;
result = ((char)(m+65)) + result;
n = (int)((n-1)/26);
}
System.out.println(result);
}
}
C语言题解
#include <stdio.h>
void intToExcelColumn(int n) {
char result[100];
int idx = 0;
while (n > 0) {
int m = (n - 1) % 26;
result[idx] = (char) (m + 65);
idx++;
n = (n - 1) / 26;
}
for (int i = idx - 1; i >= 0; i--) {
printf("%c", result[i]);
}
}
int main() {
int n;
scanf("%d", &n);
intToExcelColumn(n);
return 0;
}