华为秋招2017年8月份笔试(三)

xiaoxiao2021-02-28  90

1.3 字母计数法:

某种场景下,开发人员决定使用字母表示一个正整数,该方法利用英文的小写字母表示,映射规则很简单,  按字母顺序每一个字母都代表一个值,如下所示列表的部分内容: a 1 b 2 c 3 ... z 26 aa 27 ab 28 ... huawei 104680767 ... 函数原型: Void convertTo26(const char *input,char *output); /输入参数input为一个ASCII码的字符串。输入字母表示的数最少一位,最多6位,且字母只能使用小写字母,输入十进制不超过32位整数最大值 输入   ab 输出    28

public class Main03 { //等价于26进制转换 public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String str=sc.nextLine(); String outstr=null; convertTo26(str); } } //转化为26进制 private static void convertTo26(String str) { //判断输入的是数字、 还是字母字符串 if (str.length()<1||str.length()>6) { return; } //判断是字母还是数字 int sum=0; int len=str.length(); char [] c=str.toCharArray();//转换为数组 if ( str.charAt(0)>=97 && str.charAt(0)<=122) {//字母 for (int i = 0; i <c.length; i++) { sum+=(c[i]-96)*Math.pow(26, c.length-i-1); } System.out.println(sum); }else if (str.charAt(0)>=48 && str.charAt(0)<=57) {//数字 int num=Integer.parseInt(str); int mod=0; List<Integer>list=new ArrayList<>(); while(num!=0){ mod=num&; num=num/26; list.add(mod);//将结果进行保存,需要进行逆序处理 } Collections.reverse(list);//逆序处理 String result=""; for (int i = 0; i < list.size(); i++) { result+=String.valueOf((char)(list.get(i)+96)); } System.out.println(result); } } }

转载请注明原文地址: https://www.6miu.com/read-38592.html

最新回复(0)