面试的一道算法笔试题,现总结如下。参考了网上的代码,已给出源代码链接,感谢原作者!程序已调试通过,且正确无误
1 .在Excel中,列的名称是这样一个递增序列:seq={A、B、C、... Z、AA、AB、AC、... AZ、BA、BB、BC、... BZ、CA、... ZZ、AAA、AAB...}。求给出任意一个序列,求这个序列是第几个字符串。
方法一:这个问题可以看成是二十六进制转化为十进制。即ABC=A*(10^2)+B*(10^1)+C
此方法较简单,就不写啦~~~
方法二:ABC=(A*10+B)*10+Z。此方法可以顺序编历每一个字符
即先取得A,然后如果有B,那么就把A左移一位,即A*10+B,如果再有C,就把前面的结果再整体左移一位,再加C,即(A*10+B)*10+C
参考https://www.nowcoder.com/questionTerminal/2313251da21e4f6390eaf8a4539ef41d?pos=6&mutiTagIds=589&orderByHotValue=2
import java.util.Scanner;
public class testColToNum {
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
String s=cin.next();
int result=0;
for(int i=0;i<s.length();i++)
{
result=result*26+(s.charAt(i)-'A'+1);
}
System.out.println(result);
}
}
2.在Excel中,列的名称是这样一个递增序列:seq={A、B、C、... Z、AA、AB、AC、... AZ、BA、BB、BC、... BZ、CA、... ZZ、AAA、参考AAB...}。求给出任意一个自然数n,求这个序列中第n个字符串。函数声明:String getColumnLable(int n)
参考http://blog.csdn.net/guomutian911/article/details/49129321
package From0519;
import java.util.Scanner;
public class ExcelToNum {
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
int num=cin.nextInt();
String tmp ="";
int count = 1;
while((int)(num/Math.pow(26, count-1))>0){
int w3 = ((int)(num % Math.pow(26,count)))/((int)Math.pow(26, count-1));
char c = (char)(w3+65);
tmp = c + tmp;
count++;
}
System.out.println(tmp);
}
}