Depois de aprender C, Python e Ruby fina…

Depois de aprender C, Python e Ruby finalmente resolvi estudar Java.
Abaixo segue um exercício bacana do livro Thinking in Java, exercício 10:

“””
Exercise 10: (5) A vampire number has an even number of digits and is formed by multiplying a pair of numbers containing half the number of digits of the result. The digits are taken from the original number in any order. Pairs of trailing zeroes are not allowed. Examples include:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
Write a program that finds all the 4-digit vampire numbers.
“”””

Solução (sei que há melhores, mas estou utilizando tão somente o conhecimento passado pelo livro até o momento):


class VampireNumbers {
  public static void main(String[] args) {
    for(int i = 1000; i < 9999; i++) {
      isVampire(i);
    }
  }

  public static void isVampire(int number) {
    if(number % 100 == 0) { return; } // Gets numbers with two trailling zeros out.
    
    char[] numberCharArray = ("" + number).toCharArray();
    String a = "" + numberCharArray[0];
    String b = "" + numberCharArray[1];
    String c = "" + numberCharArray[2];
    String d = "" + numberCharArray[3];
    
    int ab = Integer.parseInt(a + b);
    int ba = Integer.parseInt(b + a);
    int ac = Integer.parseInt(a + c);
    int ca = Integer.parseInt(c + a);
    int ad = Integer.parseInt(a + d);
    int da = Integer.parseInt(d + a);
    
    int bc = Integer.parseInt(b + c);
    int cb = Integer.parseInt(c + b);
    int bd = Integer.parseInt(b + d);
    int db = Integer.parseInt(d + b);

    int cd = Integer.parseInt(c + d);
    int dc = Integer.parseInt(d + c);

    int[] multiples = {ab, ba, ac, ca, ad, da, bc, cb, bd, db, cd, dc};
    for(int auxA=0; auxA < multiples.length; auxA++) {
      for(int auxB=0; auxB < multiples.length; auxB++) {
        if(multiples[auxA] * multiples[auxB] == number){
          System.out.println(multiples[auxA] + " * " + multiples[auxB] + " = " + number);
        }
      }
    }
  }

}


Anúncios