我的答案(Java):
import java.util.Scanner;
import javax.print.attribute.standard.Finishings;
public class Main{
private String line;// 原始输入
/**
* 输入
* @return
*/
private String input(){
Scanner sc= new Scanner(System.in);
try {
line=sc.nextLine();
} catch (Exception e) {
line=null;
e.printStackTrace();
}finally{
sc.close();
}
return line;
}
/**
* 找到有效起始位
* @param line
* @return
*/
private int findStart(String line){
int start=2;// 去除"0v"或"0w",从2开始
for(int i=start;i<line.length();i++){
if(line.charAt(i)!='0'){// 找到第一个不为0的有效位
start=i;
break;
}
}
return start;
}
public static void main(String[] args){
Main m=new Main();
String line=m.input();
if(line==null){
return;
}
long result=0;
if(line.startsWith("0v")||line.startsWith("0V")){
// 9进制
int start=m.findStart(line);
String validateLine=line.substring(start, line.length());// 提取有效位
if(validateLine.length()>8){// 有效位大于8位,非法
System.out.println("-1");
return;
}
for(int i=0;i<validateLine.length();i++){
int num=validateLine.charAt(i)-'0';// 依次解析每一位
if(num<0||num>8){// 非法
System.out.println("-1");
return;
}
result+=num*Math.pow(9, validateLine.length()-i-1);
}
System.out.println(result);
}else if(line.startsWith("0w")||line.startsWith("0W")){
// 11进制
int start=m.findStart(line);
String validateLine=line.substring(start, line.length());
if(validateLine.length()>8){
System.out.println("-1");
return;
}
for(int i=0;i<validateLine.length();i++){
int num=0;
char ch=validateLine.charAt(i);
if(ch=='a'||ch=='A'){
num=10;
}else if(ch>='0'&&ch<='9'){
num=ch-'0';
}else{
System.out.println("-1");
return;
}
result+=num*Math.pow(11, validateLine.length()-i-1);
}
System.out.println(result);
}else{
// 非法
System.out.println("-1");
}
}
}