IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

factoriel des nombres <12


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 23
    Par défaut factoriel des nombres <12
    Bonsoir ,
    On me demande de calculer le factoriel des nombres très grand, a ma grande suprise pour des valeurs supérieur a 12 la méthode simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=1;i<=valeur;i++)
      facto=facto*i
    ne marche pas je voudrai savoir pourquoi et comment faire pour calculer le factoriel des nombres supérieurs a 12 sans utiliser la classe BigInteger

    Merci d'avance

  2. #2
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Par défaut
    Bonsoir,

    La parenthèse qui manque à la fin du for, c'est un accident dans le message ou une erreur dans le code ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 23
    Par défaut
    Citation Envoyé par tabouet Voir le message
    Bonsoir,

    La parenthèse qui manque à la fin du for, c'est un accident dans le message ou une erreur dans le code ?
    oui c'est un accident j'ai rectifié merci

  4. #4
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Par défaut
    Mon java date de quelques années, mais si mes souvenirs sont bons, tu vas être obligé d'utiliser la classe BigInteger car pour les valeurs supérieures à 12, la valeur de la factorielle augmente très très vite. Par exemple :

    15! = 1307674368000
    20! = 2432902008176640000

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Integer Max Value: "+Integer.MAX_VALUE);
    te donnera une idée sur l'origine du problème

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 23
    Par défaut
    j'ai fais avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package ff;
     
    public class FactBigInteger {
    	public FactBigInteger(long valeur)
    	{
    		this.valeur=valeur;
    	}
    	public long valeur;
     
    	 long controls (  )
    	{
    		if (this.valeur>0)
    			return 1;
    			else 
    				return -1;
    	}
    	long BigIntegerfact ( ) 
    	{
    		long facto=1;
    		for(int i=1;i<=this.valeur;i++)
    		{
    			facto=facto*i;
    		} 
    		return facto;
    	}
    	static void afficher (long r)
    	{
     
    		System.out.println(r);	
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		FactBigInteger valeur=new FactBigInteger(25);
    		long test=valeur.controls(),facto=0;
    		if(test==-1)
    			System.out.println("le nombre est negatif");
    		else 
     
    			{
    			facto=valeur.BigIntegerfact();
    			afficher(facto);
    			}
     
     
     
     
    	}
     
     
    }
    mais pour des valeurs supérieurs a 20 ça marche plus

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par tafpro Voir le message
    pour des valeurs supérieur a 12 la méthode simple ne marche pas je voudrai savoir pourquoi
    factorielle de 13:
    6 227 020 800

    taille max d'un int:
    2 147 483 648 => 12! est le maximum possible sur un int.


    Factorielle de 20:
    2 432 902 008 176 640 000

    taille max d'un long:
    9 223 372 036 854 775 808 => 20! est le maximum possible sur un long

  8. #8
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    En informatique, la premiere question à te poser quand tu fais du calcul, c'est l'ordre de grandeur des valeurs que tu vas calculer pour savoir s'il faut utiliser un int, un long ou autre. C'est encore plus vrai pour le calcul de factoriel.

    Il faut donc que tu choisisses le factoriel max que tu veux pouvoir calculer et que tu prennes le type adapté. Et si tu depasses la valeur max d'un long et que tu ne veux pas utiliser de biginteger, tu es bon pour te faire ta propre classe perso...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sum avec des nombres avec virgule
    Par Bruno2000 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/09/2004, 15h01
  2. Formatage des nombres à l'affichage
    Par nbutin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 13/07/2004, 10h54
  3. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 19h10
  4. [LG]Extraire des nombres d'une chaine
    Par audreym31 dans le forum Langage
    Réponses: 4
    Dernier message: 18/01/2004, 21h24
  5. Réponses: 3
    Dernier message: 08/09/2003, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo