Google面试题,excel十进制字符串转换(java)
2016-03-11 20:13
447 查看
和171题一样,只不过转换顺序颠倒,增加了难度。
题目:输入十进制,输出对应的excel字符串列
1-A ,2-B ,3-C.....26-Z ,27-AA ,28-AB
关键点:需要考虑边界值问题,当number可以除尽26和不能除尽26.
我只做出了不能除尽26的,方法是除k取余法,即十进制转换为26进制,在把26进制每一位变成对应的字符,组成字符串
哎,看到这题,就心疼啊
题目:输入十进制,输出对应的excel字符串列
1-A ,2-B ,3-C.....26-Z ,27-AA ,28-AB
关键点:需要考虑边界值问题,当number可以除尽26和不能除尽26.
我只做出了不能除尽26的,方法是除k取余法,即十进制转换为26进制,在把26进制每一位变成对应的字符,组成字符串
package mycode; import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; public class Google2 { //写完程序自己单元测试一遍,可以提高程序正确率 public static void main(String[] args) { // TODO 自动生成的方法存根 Google2 test = new Google2(); /*命令行参数 if(args.length<0){ System.out.println("error"); System.exit(1); }else{ int x1 = Integer.parseInt(args[0]); test.method(x1); } */ Scanner sca = new Scanner(System.in); System.out.println("Please input a number!"); if(sca.hasNext()){ int temp = sca.nextInt(); test.method(temp); }else{ System.out.println("The wrong number"); System.exit(1); } sca.close(); } public void method (int x){ ArrayList<Integer> a = new ArrayList<>(); ArrayList<Character> b = new ArrayList<>(); int r = x; int m; if(x % 26 !=0){ //下面这个循环是除k取余法,记住(以26为例) for(;;){//还可以改改,看用r!=0这个条件可不可以,一直add的是m余数 m = r % 26; r = r / 26; if(r>26){//这一部分是一直除以26,并将余数存入list a里面 a.add(m); } if(r<26 && r!=0){//这一部分是当除到最后余数的时候,r不是商了,也要把r放进list a a.add(m); a.add(r); break; }if(r==0){//一开始除以26就没有商的,即小于26的数,把第一次取模的值放入即可 a.add(m); break; } } //用来验证method方法写的正不正确,除k取余法正确 for(Iterator<Integer> ite = a.iterator(); ite.hasNext();){ int array = ite.next(); System.out.print(array +" ");//一定要记住,print打印字符串的时候,变量+字符串空格用双引号,不用单引号 } for(int i=0;i<a.size();i++){ int num = a.get(i)-1; char chr = (char)('A'+num);//用来将求得的26进制转换为字符串,每一位对应一个字符 b.add(chr); } System.out.println("\n" + "result is:");//换行符要加双引号 for(int j=b.size()-1; j>=0; j--){ System.out.print(b.get(j));//为什么会indexoutofbound,因为你j从最大开始算,但是list的索引还是size-1 } } /*考虑边界值问题,能除尽26的话,这个没写出来,不会 else{ for(;r>=26;){ m = r % 26; r = r / 26; a.add(m); } a.add(r);//最后一个数添加进去 for(Iterator<Integer> ite = a.iterator(); ite.hasNext();){ int array = ite.next(); System.out.print(array +" ");//一定要记住,print打印字符串的时候,变量+字符串空格用双引号,不用单引号 } b.add('z'); for(int i=1;i<a.size();i++){ if(a.get(i)==1){ b.add('z'); continue; }else if(a.get(i)>1){ int num3 = a.get(i)-2; char chr2 = (char) ('A' + num3); } } } */ } }
哎,看到这题,就心疼啊
相关文章推荐
- 【面试经典题之链表】
- leetcode之Minimum Height Trees
- 剑指offer代码解析——面试题11求a的b次方
- 剑指offer代码解析——面试题11求a的b次方
- 面试后一点反思和毕设计划
- [.Net码农]DragDrop 注册失败的问题
- 程序员编程能力层次模型
- 最新前端开发面试题集合(非常全面)
- 数据库笔试和面试小结
- 程序员的春天来了,赏花去!说走就走
- 程序员的春天来了,最美赏花旅游地十大攻略
- 一起来做品质宅:漫话程序员们的家庭装修
- 第一篇CSDN博客,记录准备面试的种种
- 程序员必须知道的10大基础实用算法及其讲解
- 程序员如何写出牛掰的简历
- 如何写出程序员无法维护的代码?
- 软件测试职业发展方向
- 漫话程序员们的家庭装修——书房篇
- android面试题
- android面试题