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.
Assinar:
Postar comentários (Atom)
Pessoal, dei inicio às minhas postagens rsrs, essa foi apenas uma distração simples... postarei informações mas relevantes da próxima vez heheh
ResponderExcluirUma possível Solução:
ResponderExcluirpublic 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
Velho, essa do complemento de 2 foi show de bola!!!! Acho que é a única forma de fazer.
ResponderExcluirValeu Fábio,
ResponderExcluirMatemá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
A solução que implementei foi a seguinte:
ResponderExcluirpublic 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!!!
ehh a de mário foi show de bola...
ResponderExcluira sua ai tá fugindo a regra vc tá usando o operador - ainda que para multiplicação mas ta usando.
Dando uma googlada, vi que existe outra forma de fazer, usando um tal de complemento de 10. Vejam o exemplo abaixo, extraído de
ResponderExcluirhttp://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á.