题目:
8题 excel 地址
时间限制:1.0s 内存限制:256.0MB
问题描述
Excel 单元格的地址表示很有趣,它使用字母来表示列号。
比如,
A 表示第 1 列,
B 表示第 2 列,
Z 表示第 26 列,
AA 表示第 27 列,
AB 表示第 28 列,
BA 表示第 53 列,
…
当然 Excel 的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列
呢?
本题目即是要求对输入的数字, 输出其对应的 Exce濿 地址表示方式。
样例输入
26
样例输出
Z
样例输入
2054
样例输出
BZZ
解题思路:
这一题相当于以26当成进制来进行代码的书写。
解题代码:
package Test.Test_2017;
import java.util.Arrays;
import java.util.Scanner;
public class excel地址 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=0,post=0;
int N=sc.nextInt();
for (int i = 0; i < 20; i++) {
if(N/Math.pow(26,i)<1)
{
post=i;
break;
}
}
int[] arr=new int[post];
while(N>0)
{
int c=N%26;
arr[a++]=c;
N=N/26;
}
//System.out.println(Arrays.toString(arr));
for (int i = 0; i < post; i++) {
for (int j = i; j < post; j++) {
if(arr[j]<=0)
{if(j==post-1&&arr[j]==0){
continue;
}
arr[j+1]=arr[j+1]-1;
arr[j]=26+arr[j];
}
}
}
int flag=0;
for (int i = post-1; i >=0; i--) {
if(arr[i]!=0||flag==1)
{
flag=1;
System.out.print((char)('A'+arr[i]-1));
}
}
}
}