sexta-feira, 22 de maio de 2009

Lógica Básica

Galera, pra dar início as minhas postagens aqui no blog, proponho um simples desafio como distração. A proposta é criar uma "class LogicaBasica" que implemente uma solução para informar o resultado de uma subtração entre "x" e "y" sendo que só é permitido utilizar o operador de adição para os cálculos.

7 comentários:

  1. Pessoal, dei inicio às minhas postagens rsrs, essa foi apenas uma distração simples... postarei informações mas relevantes da próxima vez heheh

    ResponderExcluir
  2. Uma possível Solução:

    public class LogicaBasica {

    public int subtracao(int x, int y) {
    return (x + (~y + 1));
    }

    }

    Nessa solução utilizei complemento de 2.

    X - Y = Z ou X + (Y) = Z

    (Y) = complemento de 2 de Y

    :)

    Essa forma resolve :).

    Outra forma seria contar com um laço quanto falta de Y para chegar a X mas não atende bem quando Y > X.

    public int subtracao(int x, int y){
    int resultado = 0;
    for( int i = y; i < x; i++){
    resultado++;
    }
    return resultado;
    }

    :P
    Mario

    ResponderExcluir
  3. Velho, essa do complemento de 2 foi show de bola!!!! Acho que é a única forma de fazer.

    ResponderExcluir
  4. Valeu Fábio,

    Matemática é a grande mãe da computação!

    Mas vamos esperar o dono do post colocar que essa é solução... ou outra solução possível.

    []'s

    ResponderExcluir
  5. A solução que implementei foi a seguinte:

    public class LogicaBasica {

    public int subtrairSomando(int x, int y) {
    int z = 0;
    if(x > y){
    while(x > y){
    z++;
    y++;
    }
    }else{
    while(y > x){
    z++;
    x++;
    }
    z = -z;
    }
    return z;
    }
    }

    porém, a solução criada por Mario é a mais correta.

    valeu!!!

    ResponderExcluir
  6. ehh a de mário foi show de bola...
    a sua ai tá fugindo a regra vc tá usando o operador - ainda que para multiplicação mas ta usando.

    ResponderExcluir
  7. Dando uma googlada, vi que existe outra forma de fazer, usando um tal de complemento de 10. Vejam o exemplo abaixo, extraído de

    http://en.wikipedia.org/wiki/Method_of_complements#Decimal_example

    873 (x)
    - 218 (y)
    = 655

    ou

    873 (x)
    + 781 (complemento de 9 de y)
    + 1 (soma para obter o complemento de 10 de y)
    =====
    1655

    retirando o 1 de 1655 o resultado é: surpresa!!! O valor da subtração!!!

    Tem um pequeno bug nesse método, explicado no link que mandei, com uma possíveis soluções também explicadas lá.

    ResponderExcluir