题目大意就是:给你一个数字,但是不清楚它是多少进制的(可能是2-16进制中的一种),要求返回它所有可能的十进制结果。 举例:
输入:11 输出: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
输入:ee 输出: 不符合二进制数条件 不符合三进制数条件 不符合四进制数条件 不符合五进制数条件 不符合六进制数条件 不符合七进制数条件 不符合八进制数条件 不符合九进制数条件 不符合十进制数条件 不符合十一进制数条件 不符合十二进制数条件 不符合十三进制数条件 不符合十四进制数条件 224 238
逛了一下论坛发现,很多人都是测试通过率不足10%,我觉得可能是没有将思路捋清楚,尤其是不同进制的取值没能分割清楚(也就是说,如果输入值是一个二进制数,那么它必不可能出现0,1之外的数字)。
以下是我的傻瓜式解法(虽然不够聪明,但是胜在速度快,模板清晰,可以把细节处理得很好):
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public void change(){
Scanner sc=new Scanner(System.in);
String str = sc.nextLine();
if(str==null){
System.out.println("");
}
if(is2Numeric(str)){
int ans = Integer.parseInt(str, 2);
System.out.println(ans);
}else {
System.out.println("不符合二进制数条件");
}
if(is3Numeric(str)){
int ans = Integer.parseInt(str, 3);
System.out.println(ans);
}else {
System.out.println("不符合三进制数条件");
}
if(is4Numeric(str)){
int ans = Integer.parseInt(str, 4);
System.out.println(ans);
}else {
System.out.println("不符合四进制数条件");
}
if(is5Numeric(str)){
int ans = Integer.parseInt(str, 5);
System.out.println(ans);
}else {
System.out.println("不符合五进制数条件");
}
if(is6Numeric(str)){
int ans = Integer.parseInt(str, 6);
System.out.println(ans);
}else {
System.out.println("不符合六进制数条件");
}
if(is7Numeric(str)){
int ans = Integer.parseInt(str, 7);
System.out.println(ans);
}else {
System.out.println("不符合七进制数条件");
}
if(is8Numeric(str)){
int ans = Integer.parseInt(str, 8);
System.out.println(ans);
}else {
System.out.println("不符合八进制数条件");
}
if(is9Numeric(str)){
int ans = Integer.parseInt(str, 9);
System.out.println(ans);
}else {
System.out.println("不符合九进制数条件");
}
if(is10Numeric(str)){
int ans = Integer.parseInt(str, 10);
System.out.println(ans);
}else {
System.out.println("不符合十进制数条件");
}
if(is11Numeric(str)){
int ans = Integer.parseInt(str, 11);
System.out.println(ans);
}else {
System.out.println("不符合十一进制数条件");
}
if(is12Numeric(str)){
int ans = Integer.parseInt(str, 12);
System.out.println(ans);
}else {
System.out.println("不符合十二进制数条件");
}
if(is13Numeric(str)){
int ans = Integer.parseInt(str, 13);
System.out.println(ans);
}else {
System.out.println("不符合十三进制数条件");
}
if(is14Numeric(str)){
int ans = Integer.parseInt(str, 14);
System.out.println(ans);
}else {
System.out.println("不符合十四进制数条件");
}
if(is15Numeric(str)){
int ans = Integer.parseInt(str, 15);
System.out.println(ans);
}else {
System.out.println("不符合十五进制数条件");
}
if(is16Numeric(str)){
int ans = Integer.parseInt(str, 16);
System.out.println(ans);
}else {
System.out.println("不符合十六进制数条件");
}
}
public boolean is2Numeric(String str) {
Pattern pattern = Pattern.compile("[0-1]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is3Numeric(String str) {
Pattern pattern = Pattern.compile("[0-2]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is4Numeric(String str) {
Pattern pattern = Pattern.compile("[0-3]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is5Numeric(String str) {
Pattern pattern = Pattern.compile("[0-4]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is6Numeric(String str) {
Pattern pattern = Pattern.compile("[0-5]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is7Numeric(String str) {
Pattern pattern = Pattern.compile("[0-6]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is8Numeric(String str) {
Pattern pattern = Pattern.compile("[0-7]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is9Numeric(String str) {
Pattern pattern = Pattern.compile("[0-8]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is10Numeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public boolean is11Numeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
boolean b= str.contains("a");
if (!isNum.matches()&&!b) {
return false;
}
return true;
}
public boolean is12Numeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
boolean a= str.contains("a");
boolean b= str.contains("b");
if (!isNum.matches()&&!a&&!b) {
return false;
}
return true;
}
public boolean is13Numeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
boolean a= str.contains("a");
boolean b= str.contains("b");
boolean c= str.contains("c");
if (!isNum.matches()&&!a&&!b&&!c) {
return false;
}
return true;
}
public boolean is14Numeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
boolean a= str.contains("a");
boolean b= str.contains("b");
boolean c= str.contains("c");
boolean d= str.contains("d");
if (!isNum.matches()&&!a&&!b&&!c&&!d) {
return false;
}
return true;
}
public boolean is15Numeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
boolean a= str.contains("a");
boolean b= str.contains("b");
boolean c= str.contains("c");
boolean d= str.contains("d");
boolean e= str.contains("e");
if (!isNum.matches()&&!a&&!b&&!c&&!d&&!e) {
return false;
}
return true;
}
public boolean is16Numeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
boolean a= str.contains("a");
boolean b= str.contains("b");
boolean c= str.contains("c");
boolean d= str.contains("d");
boolean e= str.contains("e");
boolean f= str.contains("f");
if (!isNum.matches()&&!a&&!b&&!c&&!d&&!e&&!f) {
return false;
}
return true;
}
}
关于这道题,作为阿里校招算法岗第一道编程答题,就是没给我这种笨蛋一点机会啊! 等我先哭一会儿再写第二道题的解法
|