Possibilidade de numeros com mais de 10 digitos?

9 respostas
K

Boas fiz este algoritmo para converter decimais em binario, o problema é que só aceita numeros até 10 digitos…
Alguem me diz como posso fazer para que aceite numeros bem maiores…
Tentei usar BigInteger mas não consegui…

Obrigado.


import java.util.;
import java.math.
;

public class Conversor{

public static void main(String[] args){

List<Integer> binario = new ArrayList<Integer>();

int decimal = Integer.parseInt(args[0]);

int k = (int)(Math.log(decimal)/Math.log(2))+1;

int aux = 0,ai;

for(int i=k;i>0;i){

for(int j=0;j<binario.size();j++){

aux+=binario.get(j)*Math.pow(2,k-j-1);

}

ai=(decimal-aux)/(int)Math.pow(2,i-1);

binario.add(ai);

aux=0;

}

System.out.println(decimal + "(dec) = " + binario.toString() + (bin));
}

}

9 Respostas

R

Por que você não conseguiu usar BigInteger?

K

deu erro

na operação ai=(decimal-aux)/(int)Math.pow(2,i-1);

que alterações posso fazer para que o programa funciona com digitos muito grandes?

R

korvina, eu não tenho como testar porque não tem java instalado aqui, mas se está havendo o estouro na variável ai faça o seguinte:

List&lt;BigInteger&gt; binario = new ArrayList&lt;BigInteger&gt;&#40;&#41;;
...
binario.add&#40;new BigInteger &#40;&#40;decimal-aux&#41;/&#40;int&#41;Math.pow&#40;2,i-1&#41;&#41;&#41;;

Espero que funcione!

Abraços,[/b]

K

“rodolfocoutinho”:
korvina, eu não tenho como testar porque não tem java instalado aqui, mas se está havendo o estouro na variável ai faça o seguinte:

List&lt;BigInteger&gt; binario = new ArrayList&lt;BigInteger&gt;&#40;&#41;;
...
binario.add&#40;new BigInteger &#40;&#40;decimal-aux&#41;/&#40;int&#41;Math.pow&#40;2,i-1&#41;&#41;&#41;;

Espero que funcione!

Abraços,[/b]

nao funciona assim… nao expliquei bem…o arraylist binario pode ser integer porque so vai levar com 0’s ou 1’s…

o que tem de ser BigInteger é a variavel decimal que é o digito decimal que vai ser convertido para binario.

k vai receber o comprimento de digitos do binario que o decimal tem…

teria de ser algo do genero:

mas estoura ao calcular k… porque o Math.log nao funciona com BigInteger …

java:17: log(double) in java.lang.Math cannot be applied to (java.math.BigInteger)
int k = (int)(Math.log(decimal)/Math.log(2))+1;

e em ai=(decimal-aux)/(int)Math.pow(2,i-1);

java:24: operator - cannot be applied to java.math.BigInteger,int
ai=(decimal-aux)/(int)Math.pow(2,i-1);

L

Ou então vc pode fazer assim

Long decimal = Long.parseLong&#40;args&#91;0&#93;&#41;;
		System.out.println&#40;decimal + "&#40;dec&#41; = " + Long.toBinaryString&#40;decimal&#41;
				+ "&#40;bin&#41;"&#41;;
K

o problema é que estoura a calcular o logatirmo de um biginteger

porque o Math.log so aceita double…

alguem sabe como contornar o assunto?!

Obrigado.

J

Para que contornar???

Usa o double ou o long…

K

precisa de ser BigInteger… preciso de numeros com muiiiiiiiitos digitos…

V

Usando o toBinaryString()

public class Conversao&#123;
   public static int decimalParaBinario&#40;String numero&#41; &#123;
      return Integer.toBinaryString&#40;numero&#41;;
   &#125;
   public static void main&#40;String args&#91;&#93;&#41;&#123;
      System.out.print&#40;"Numero decimal&#58; "+args&#91;0&#93;+"\nBinario&#58; "+decimalParaBinario&#40;args&#91;0&#93;&#41;&#41;;
   &#125;
&#125;
Criado 28 de outubro de 2007
Ultima resposta 4 de nov. de 2007
Respostas 9
Participantes 5