2011-09-27 2 views
0

J'essaie de comparer des nombres si grands que même BigIntegers ne peut pas les traiter. Ma solution est de convertir les nombres en chaînes et utiliser la comparaison de chaîne sur eux.Conversion de grands nombres au format String pour comparaison

Est-ce que cela fonctionnera? Je ne suis pas vraiment sûr de la façon de mettre en œuvre quelque chose comme ça. J'essaie simplement de tester un algorithme pour produire la factorielle de 1000 pour un projet Euler dans lequel je suis aspirée.

+0

Avez-vous quelques exemples de code pour BigIntegers, qui ne sont pas comparables? Et pourquoi ça ne marcherait pas avec Strings? Si une seule chaîne commence par "-", elle est plus petite. Si les deux sont positifs, la chaîne la plus courte est plus petite, si les deux sont négatives, la plus longue. Sinon, comparez-les chiffre par chiffre à partir de la gauche. –

+0

Quelle est la taille de vos numéros? 1000! semble avoir environ 2568 chiffres, ce qui ne devrait pas être un problème – Henry

+0

Le plus grand nombre serait 1000 !, oui.Wint BigInteger développer pour répondre aux exigences? –

Répondre

1

Votre hypothèse est fausse. BigInteger fournit une précision arbitraire, de sorte qu'il peut certainement traiter des nombres aussi gros.

les opérations suivantes:

public class Main { 
    public static void main(String[] args) { 
     BigInteger thousand = BigInteger.valueOf(1000L); 
     for (int i = 999; i > 0; i--) 
     { 
      thousand = thousand.multiply(BigInteger.valueOf(i)); 
     } 

     System.out.println(thousand.toString()); 
    } 

} 
+0

Vraiment? J'avais lu que la limite supérieure de BigInteger était beaucoup plus petite que cela. Vous dites que la limite est arbitraire, s'étend-elle pour répondre aux besoins des utilisateurs? Pensez-vous que ce serait la meilleure façon de tester mon code? –

+0

BigInteger code des entiers en utilisant un codage de signe-magnitude (http://en.wikipedia.org/wiki/Signed_number_representations#Sign-and-magnitude_method) avec un int [] pour stocker l'amplitude. La longueur maximale d'un tableau en Java est de 2147483647. C'est assez gros (à moins que mes calculs ne soient erronés, c'est environ 2^(32 * 2147483647). –