首页 > 代码库 > 华为笔试练习题----解析9进制,11进制的字符串为10进制的数字输出

华为笔试练习题----解析9进制,11进制的字符串为10进制的数字输出

                                                                              解析9进制,11进制的字符串为10进制的数字输出
描述:

解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位。解析后以10进制的数字输出。
如果解析到非法字符串则返回-1 

9进制:
 9进制的数的范围:0,1,2,3,4,5,6,7,8
 9进制的开始为:0V或者0v
 9进制的正确实例:0V11 0v564 0V123 0v0784 0V0 0v 0V
 9进制的错误实例:0V923 0vt12 00V21 0123 
 9进制转换为10进制:0V11 -> 10
        0v564 -> 463
 
 11进制:
 11进制的数的范围:0,1,2,3,4,5,6,7,8,9,A(a)
 11进制的开始为:0W或者0w
 11进制的正确实例:0W11 0w564 0W123 0w0A8a 0W 0w
 11进制的错误实例:0WB923 0wVaA 00W21 0WAx123 
 11进制转换为10进制:
        0W11 -> 12
        0w564 -> 675

运行时间限制:无限制
内存限制:无限制
输入:

 输入为一行9进制或11进制的字符串,格式如上述

输出:

 输出为10进制的数字

样例输入:
0w564
样例输出:
675
答案提示:
 

这道题我是java实现的,因为9进制和11进制的字符串都有一定的规律,所以,想到用正则表达式来进行匹配。9进制的正则表达式为^0[v|V][0-8]*$,11进制的正则表达式为^0[w|W][0-9|a|A]*$。当输入的字符串符合其中的形式则进行解析,否则输入-1。

代码实现:

import java.util.Scanner;  import java.util.regex.Pattern;    public class Main {            public int charge(String num){          int res=0;          String reg1 = "^0[v|V][0-8]*$";          String reg2 = "^0[w|W][0-9|a|A]*$";          char sub[];          if(Pattern.matches(reg1, num)){              sub = num.substring(2).toCharArray();              for(int i = 0;i< sub.length; i++){                  int count =Integer.parseInt(String.valueOf(sub[i]));;                  res += count * Math.pow(9, sub.length-i-1);              }              return res;          }else if(Pattern.matches(reg2, num)){              sub = num.substring(2).toCharArray();              for(int i = 0;i< sub.length; i++){                  if(sub[i]==‘a‘||sub[i]==‘A‘){                    res += 11 * Math.pow(11, sub.length-i-1);                  }else {                    int count = Integer.parseInt(String.valueOf(sub[i]));                    res += count * Math.pow(11, sub.length-i-1);                  }              }              return res;          }          return -1;      }      public static void main(String[] args) {              Scanner cin = new Scanner(System.in);              Main main = new Main();              String m;              while (cin.hasNext()){                  m = cin.next();                   System.out.println(main.charge(m));              }  

此代码在IDE下运行是没有问题的,但在华为的测试坏境下,有一个测试用例没有通过,因为测试用例是不公开的,所以我暂没找到原因,希望网友能帮忙找下bug.

华为笔试练习题----解析9进制,11进制的字符串为10进制的数字输出