Thuật toán sai.... và không biết sai ở đâu

Đề bài: Cho số nguyên dương x được nhập từ bàn phím (x có 4 chữ số). Hãy kiểm tra xem x có phải là số vampire hay không? Định nghĩa: Số vampire x có n chữ số là số thỏa mãn • n là số chẵn

• Tồn tại 2 số x1, x2, mỗi số được tạo thành từ n/2 chữ số của x theo vị trí bất kỳ, thỏa mãn x = x1∗x2 • Các cặp gồm toàn số 0 là không thỏa mãn Ví dụ: 1260 = 21 * 60 (n = 4, x1 = 21, x2 = 60) 125460 = 246 * 510 (n = 6, x1 = 246, x2 = 510) 11930170 = 1301 * 9170 = 1310 * 9107 (n = 8, hai cặp (x1, x2) = (1301, 9170) và (x1, x2) = (1310, 9107) )
Yêu cầu: Tạo tệp Vampire.java thực hiện yêu cầu của đề bài, chứa hàm boolean isVampire(int x) trả về giá trị true nếu x là số vampire, và trả về giá trị false nếu ngược lại. Sử dụng hàm void printStars() để in ra 20 dấu “*” ở trước và sau kết quả của chương trình. Ví dụ: Đầu vào: x = 1111 Đầu ra: ******************* 1111 khong la so vampire *******************
Đầu vào: x = 1260 Đầu ra: ******************* 1260 la so vampire *******************
đây là bài em làm…

Cùng là code up lên sao em k copy code đặt vào markdown cho mọi người dễ nhìn hơn
Cách up code có markdown

ok anh … em sẽ chú ý… vì em mới dùng DNH

Em tham khảo thuật toán này nha vì em không post code lên nên làm biếng gõ lại quá -.- .
Chưa nghĩ ra được cách gì tối ưu hơn, với lại đề chỉ yêu cầu x có 4 chữ số thôi.

public static boolean isVampire(int x){
        int a ,b;
        for(int i = 10; i < 100;i++){
            if(x % i == 0){ 
                a = i;
                b = x / a; 
                if((b+"").length() == 2){// kiểm tra độ dài của b có phải 2 chữ số không
                    if(compare(x+"", (a+"") + (b+""))){
                        //System.out.println(a + ":" + b);
                        return true;
                    }
                }  
            }
        }
        return false;
    }
    public static boolean compare(String a, String b){// hàm kiểm tra xem a,b có được tạo ra từ các chữ số của x hay không
        char[] firstNum = a.toCharArray();
        char[] secondNum = b.toCharArray();
        Arrays.sort(firstNum);
        Arrays.sort(secondNum);
        for(int i = 0; i < a.length();i++){
            if(firstNum[i] != secondNum[i]) return false;
        }
        return true;
    }
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?