一家面试公司的机试题,写一个函数,要求输入大于零的整数,返回大写字母序列

例如:
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