博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2016百度实习编程题:编号转换
阅读量:5089 次
发布时间:2019-06-13

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

参考链接:http://www.cnblogs.com/sshoub/archive/2011/07/29/2121312.html

根据参考链接中的算法,我这样理解

ABCDEF,这个看出一个26进制的数,0<->Z、1<->A、2<->B

题目要求我们将十进制数 和 26进制数进行转换

26进制数字转换成十进制

注意:越靠近后面的字符,对于的位权越低

如下代码:

public static int AZTonum1(String str){        int r = 0;        int p = 0;        int n = str.length() ;        for(int i = n-1;i>=0;i--){            if(r ==0){                p = str.charAt(i) - 'A' +1;                r = 26;            }else{                p = p + r *( str.charAt(i) - 'A' +1);                r = r * 26;            }                }        return p;    }

在上面博客评论中有下面的代码

public static int AZTonum(String str){        int r = 0;        for(int i = 0;i

这里每次更新需要乘以26来源 大于 26进一位

十进制数转换成26进制

这里就是连除

 

public static String numToAZ(int num){        if(num == 0)            return "Z";        int r = 0;        String result="";        while(num!=0){            r = num%26;            char ch = ' ';            if(r ==0)                ch ='Z';            else                ch = (char)(r -1 + 'A');            result = ch + result;            if(result.charAt(0) == 'Z')                num = num/26-1;            else                num/=26;        }        return result;    }

整体实现代码:

import java.util.Scanner;public class Main {        public static void main(String[] args) {        Scanner in = new Scanner(System.in);        String str=null;        String[] A;        String patternRC = "R[\\d]+C[\\d]+";        String patternAZ = "[A-Z]+[\\d]+";        int num;        String res;        while(in.hasNext()){            str = in.next();            res ="";            num =0;            //Rx C y 模式 R23C55 提取 55 转换成26进制            if(str.matches(patternRC)){                int id = str.indexOf('C');                String x = str.substring(1,id);                String y = str.substring(id+1);                int ynum = Integer.valueOf(y);                res = numToAZ(ynum);                res = res + x;                System.out.println(res);                // BC23 提取BC转换成 十进制            }else if(str.matches(patternAZ)){//                System.out.println(str);                String x = str.replaceAll("[A-Z]+","");                str = str.replaceAll("[\\d]+","");                int y = AZTonum(str);                res = "R" + x + "C" + y;                System.out.println(res);            }else{                System.out.println("输入非法");            }        }        System.out.println();    }    public static int AZTonum(String str){        int r = 0;        for(int i = 0;i
=0;i--){ if(r ==0){ p = str.charAt(i) - 'A' +1; r = 26; }else{ p = p + r *( str.charAt(i) - 'A' +1); r = r * 26; } } return p; } public static String numToAZ(int num){ if(num == 0) return "Z"; int r = 0; String result=""; while(num!=0){ r = num%26; char ch = ' '; if(r ==0) ch ='Z'; else ch = (char)(r -1 + 'A'); result = ch + result; if(result.charAt(0) == 'Z') num = num/26-1; else num/=26; } return result; }}

程序没有判断输入多少行数据,之间对输入的值进行判断

 

转载于:https://www.cnblogs.com/theskulls/p/5443825.html

你可能感兴趣的文章