解析9进制,11进制的字符串为10进制的数字输出 | |
描述: |
解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位。解析后以10进制的数字输出。 9进制: |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: |
输入为一行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.