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

Langage Java Discussion :

Somme de 2 nombres long


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut Somme de 2 nombres long
    Bonsoir tout le monde;
    je suis en cours avec le langage java et j'ai besoin d'un aide.
    j'ai fait un petit programme qui fait la somme de deux long nombre; c'est pas de type long mais plus que ça.
    c'est come je veut faire la somme des 2 nombres suivant:
    876589569384569356394756394756985695960868726340876340876408964087236402894602374602346237462034...
    +
    698569596563947563947569856959608687263408763408764089640872364028946023746023462374620344564564...
    pour cet effet; j'ai déclaré des variables de type StringBuffer; en suite j'ai inversé la chaîne pour que je débute le calcul à gauche.
    voila le programme :
    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
    public class TTest {
    	public static void main(String[] args){
    		int r=0;
    		int a;
            StringBuffer n1 = new StringBuffer("345");
            StringBuffer n2 = new StringBuffer("098");
            StringBuffer n = new StringBuffer();
            n1.reverse();n2.reverse();// inverser les 2 chaines 
            for(int i=0;i<n1.length()-1 && i< n2.length()-1;i++){
     
            a = Integer.parseInt(n1.charAt(i)) + Integer.parseInt(n2.charAt(i));
            if(a<10){
            	r=0;
            }else{
            	r =a%10;
            	a = a/10;
            }
            }
            n.append(a);
            n.reverse();
            System.out.println("la somme : n1 + n2 est : " + n );
    	}
    }
    lorsque je compile je reçois une erreur dans la ligne suivante :
    a = Integer.parseInt(n1.charAt(i)) + Integer.parseInt(n2.charAt(i));
    Aidez moi SVP

  2. #2
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Salut, n1.charAt(i) va renvoyer un char ( caractère ), mais Integer.parseInt attends une string d'ou ton erreur

  3. #3
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 132
    Par défaut
    Essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    n1.substring(i,i+1)
    Ca renvoie le String contenant un seul caractère, le caractère en position i (en commençant à compter à zéro...)

    (tu peux trouver la documentation ici...)

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il y a une raison particulière pour que tu n'utilises pas la classe BigInteger ???

    a++

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Quel rapport entre une addition de 2 nombres et la somme des codes (charset) de chaque caractère représentant le nombre ?

    Tu veux additionner 2 nombres énormes ou tu veux faire autre chose ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 132
    Par défaut
    2-3 fautes dans ton code... Ainsi qu'une remarque :

    - Ton calcul n'est pas bon : tu oublies le report, quand tu fais ton addition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = Integer.parseInt(n1.substring(i,i+1)) + Integer.parseInt(n2.substring(i,i+1))+r;
    - Tes calculs dans le if ne sont pas bons... C'est le report qui est ton résultat divisé par 10 (en division entière) et ton a qui est le reste de la division de a par 10 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       r = a / 10;
       a = a % 10;
    - Le append(...) n'est pas au bon endroit : il doit être dans la boucle, pour que tu ajoutes le caractère après chaque calcul...

    De plus, le if n'est pas nécessaire... En effet, r = r/10 donne r=0 si r<10 et a = a%10 n'a pas d'influence si a<10.

    Voici une solution :

    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
     
    public class TTest {
        public static void main(String[] args){
            int r=0;
            int a;
            StringBuffer n1 = new StringBuffer("1234567");
            StringBuffer n2 = new StringBuffer("1432094");
            StringBuffer n = new StringBuffer();
            n1.reverse();n2.reverse();// inverser les 2 chaines 
            for(int i=0;i<n1.length() && i< n2.length();i++){
     
            a = Integer.parseInt(n1.substring(i,i+1)) + Integer.parseInt(n2.substring(i,i+1))+r; // AJOUT DE r
            r=a/10;
            a=a%10;
    //         if(a<10){
    //             r=0;
    //         }else{
    //             r = a / 10;
    //             a = a % 10;
    //         }
            n.append(a); // DANS LA BOUCLE
            }//FIN BOUCLE
            n.reverse();n1.reverse();n2.reverse();// inverser les 2 chaines 
            System.out.println(n1+" + "+n2+" = " + n );
     
            int i1 = Integer.parseInt(n1.toString());
            int i2 = Integer.parseInt(n2.toString());
            System.out.println(i1+" + "+i2+" = " + (i1+i2) );
        }
    }
    (j'ai ajouté une petite vérification, en fin de programme... )

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut
    - Ton calcul n'est pas bon : tu oublies le report, quand tu fais ton addition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = Integer.parseInt(n1.substring(i,i+1)) + Integer.parseInt(n2.substring(i,i+1))+r;
    Oui effectifvement mo bloc if ne répond pas vraiment au objectif: en faite la calcul du % de a vaut mieu.

    merci pour l'aide.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Quel rapport entre une addition de 2 nombres et la somme des codes (charset) de chaque caractère représentant le nombre ?

    Tu veux additionner 2 nombres énormes ou tu veux faire autre chose ?
    l'objectif est de réaliser un somme de 2 nombres très long(qui dépasse le type long) . donc j'ai pensé a entrer des nombres en tant que string , ensuite (Integer.parseInt(...)) va convertir chaque caractère en un entier ....
    c'est ça l'objectif

  9. #9
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Comme dit precedemment, c'est à ca que sert la classe BigInteger

    C'est mieux de ne pas ré-inventer la roue, ca fait gagner du temps et ca evite les erreurs...

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

Discussions similaires

  1. Comment obtenir la somme et le nombre total d'un champ avec SQL ?
    Par ghazaliove dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/05/2008, 21h32
  2. calcule la somme de 2 nombre complexes avec structure
    Par autoin dans le forum Débuter
    Réponses: 3
    Dernier message: 05/04/2008, 20h51
  3. [Debutant]Somme de deux nombres avec résultat connu
    Par Tchupa dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/06/2007, 10h32
  4. La somme de mes nombres en RAF ne fonctionne pas
    Par beegees dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/05/2007, 09h46
  5. Somme sur des nombre décimaux
    Par chrislauxerrois dans le forum Access
    Réponses: 1
    Dernier message: 01/08/2006, 16h46

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