1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

JAVA - Números muito grandes

Discussão em 'Programação' iniciada por Kevin04PT, 6 de Maio de 2012. (Respostas: 10; Visualizações: 3171)

  1. Kevin04PT

    Kevin04PT Power Member

    Boas,

    Precisava de efetuar cálculos e comparações com um número inteiro um bocado grande:

    Nº : 600851475143

    Mas, ao atribuir este número tanto a uma variável do tipo int como do tipo long dá-me um erro de : " integer number too large".

    Pesquisei um bocado e encontrei a solução do BigInteger, no entanto isto não é muito prático para o que quero. Pois tenho tido problemas a tentar comparar esse BigInteger com outros números, para por exemplo ciclos While. Mesmo usando o compareTo. E além do mais tenho de mudar todas as outras variáveis para o tipo BigInteger para haver compatibilidade.

    Outra coisa, a qual não sei mesmo como dar a volta é eu ter um vetor do int, com vários valores guardados lá e queria poder utilizar os valores desse mesmo vetor para cálculos com o BigInteger e obviamente não tem compatibilidade. Como poderia alterar o tipo de vetor para funcionar com BigIntegers? Melhor ainda, alguém sabe de outra solução mais prática e com maior compatibilidade para resolver este problema?

    Cumprimentos.
     
  2. Podes sempre transformar os números apenas quando os comparas, ou mesmo usar valores double em vez do BigInteger
     
  3. Kevin04PT

    Kevin04PT Power Member

    Mas num caso, por exemplo, como este:

    Código:
    while ((num > 1)) {
    
    
                if (((num % (primeNum[p])) == 0)) {
                    
                    num = (num / (primeNum[p]));
                    System.out.println("Num: " + num);
    
    
    Sendo o num o tal número grande, como poderia utilizar os valores do vetor para as contas? Ao mudar para tipo double continuo a ter o mesmo erro...
     
  4. Kevin04PT

    Kevin04PT Power Member

    Ninguém?
     
  5. Hi World!

    Hi World! Power Member

    A solução que podes fazer, para contornar o número de bits que o Java permite para a representação de números, é tentares dividir esses números em partes, como se de uma divisão normal ocorre..

    Infelizmente, não há maior representação de números (em Java) maior que BigInteger..
     
  6. Kemosabe-TBC

    Kemosabe-TBC Power Member

    Nem sequer é preciso um biginteger. Uma variável de 64 bits chega e sobra para representar números dessa dimensão
     
  7. Kevin04PT

    Kevin04PT Power Member

    Como assim?
     
  8. Kemosabe-TBC

    Kemosabe-TBC Power Member

    Um inteiro de 32 bits permite representar 2^32 = 4294967296 valores diferentes (10 casas decimais)
    Um inteiro de 64 bits permite representar 2^64 = 18446744073709551616 valores diferentes (20 casas decimais)

    O número que mostraste tem 12 casas decimais.
     
  9. Kevin04PT

    Kevin04PT Power Member

    E como posso declarar uma variavel desse tipo?

    EDIT: Se for através do long, continua a dar erro.
     
  10. brunoss

    brunoss Power Member

    tens que meter um l à frente assim como se quisesses representar um numero em float terias que por f.
     
  11. Kevin04PT

    Kevin04PT Power Member

    Funcionou. Obrigado :D
     

Partilhar esta Página