博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第八届蓝桥杯Java试题7--Excel地址
阅读量:4170 次
发布时间:2019-05-26

本文共 1059 字,大约阅读时间需要 3 分钟。

第八届蓝桥杯试题7–Excel地址

题目:

Excel单元格的地址表示很有趣,它使用字母来表示列号。

比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,

当然Excel的最大列号是有限度的,所以转换起来不难。

如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?

本题目既是要求对输入的数字, 输出其对应的Excel地址表示方式。

例如,

输入:
26
则程序应该输出:
Z

再例如,

输入:
2054
则程序应该输出:
BZZ

我们约定,输入的整数范围[1,2147483647]

资源约定:

峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。


笨笨有话说:

这有点像进制关系,又不完全是。好像末2位是以1当26,末3位是以1当26*26

歪歪有话说:

要是从字母序列转数字还好点,倒过来有点麻烦,不过计算机跑得快啊。

思路:

这类似于进制转换,但又有点区别,可以用进制转换的方法计算出每位对应的十进制值,然后根据这个值用charAt()方法从字符串中取出对应的字母,最后要对得出的字符串进行反转,因为根据进制转换的算法求出的字符串是从个位开始保存的,最开始位是个位,所以需要反转一下。

代码:

import java.util.Scanner;public class Excel地址 {	public static void main(String[] args) {		Scanner in=new Scanner(System.in);		int n=in.nextInt();		int yu=1;		int a=26;		String str="";		String s=" ABCDEFGHIJKMLNOPQRSTUVWXYZ";		int result=0;		if(n<=a)			str=s.charAt(n)+"";		while(n>a) {			yu=n%a;			result=n/a;			if(yu==0) {				yu=26;				result--;			}			str+=s.charAt(yu);			if(result

转载地址:http://fzwai.baihongyu.com/

你可能感兴趣的文章
python global语句 变量作用域
查看>>
python 寻找前5个默尼森数
查看>>
python2 type()函数 isinstance()函数
查看>>
python is 同一性运算符
查看>>
python basestring( )
查看>>
python 本地数据获取
查看>>
python write( )函数
查看>>
python read( )函数
查看>>
python readline()函数
查看>>
python readlines()函数
查看>>
python writelines()函数
查看>>
python 文件读写5个实例
查看>>
python 文件读写项目实践
查看>>
python的 os 和 shutil 模块
查看>>
python 如何反转序列
查看>>
python str.join()
查看>>
python 内置函数 reversed()
查看>>
python sort()方法
查看>>
python sorted()函数
查看>>
python reverse()方法
查看>>