例如:
1返回A 26返回Z
27返回AA 53返回BA
676返回ZZ 677返回AAA
以此类推。。
咋一看很简单,可越想越复杂感觉,现在头都有些昏了,只好寻求帮助了,谢谢!
[code="java"]
public class Test2
{
public static final Integer MODEL_NUMBER = 26;
public static char queryString(final int number)
{
if (number <= MODEL_NUMBER)
{
return (char) (number + 64);
}
return 'a';
}
public static String a1(final int number)
{
StringBuffer sb = new StringBuffer();
int k = 1;
int num = number / MODEL_NUMBER;
while (num >= MODEL_NUMBER)
{
k++;
num = num / MODEL_NUMBER;
}
for (int i = 0; i < k; i++)
{
sb.append(queryString(number % MODEL_NUMBER == 0 ? MODEL_NUMBER
: num));
}
if (number % MODEL_NUMBER != 0)
{
sb.append(queryString(number % MODEL_NUMBER));
}
return sb.toString();
}
public static void main(String[] args)
{
System.out.println(a1(676));
}
}
[/code]
给你写了一个:经过测试可以。
[code="java"]
public static String getChar(int num) {
String str = "";
int yushu = num - 26 * (num / 26); //获得余数
int deshu = num / 26; //获得倍数
if (num <= 26) {
str = String.valueOf((char) (64 + num));
}
else if (yushu == 0) {
str = String.valueOf((char) (64 + deshu))
+ String.valueOf((char) (64 + 26));
}
else if(yushu != 0){
for(int i=1;i<=26;i++){
if(yushu == i){
str = String.valueOf((char) (64 + deshu))
+ String.valueOf((char) (64 + yushu));
}
}
}
return str;
}
[/code]
代码你可以自己去整理。
主要的原理就是一个数 的和26去除 。
如果能除尽没有余数,就把它得出的倍数换成响应的字母,然后在拼接上26(也就是z)。
如果有余数,把余数和倍数都变成字母,然后拼接。
明白不了?
楼上回答的有点问题,我试过你的代码了,输入677后返回的是ZA而不是AAA。题目的原理应该是这样的,和十进制数很类似,不过这个是26进制,而且表现方式不是1,2,3,~9,而是A~Z,比如676是ZZ,加一后变成677,那么ZZ进一位应该是A00,这个题目有个特殊的地方就是1和0都用A来表示,所以很要命。我正在调试相关代码
在a1方法的16行StringBuffer sb = new StringBuffer();
加上以下判断。
[code="java"]
if (number <= MODEL_NUMBER)
{
return sb.append(queryString(number)).toString();
}
[/code]
我想这个题有点问题啊,676是不是应该是YZ,677是ZA啊,AAA对应的应该是703
不存在0的26进制,需要仔细想一下
题弄错了,原题是zz702 aaa703的,很老的题了,刚搜到一篇2005年的文章有这题
http://www.cnblogs.com/aowind/archive/2005/04/13/136898.html