Addition de deux tableaux

Signaler
Messages postés
6
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
11 novembre 2007
-
Messages postés
6
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
11 novembre 2007
-
Bonjour à tous,

Je tiens tout d'abord à dire que je suis débutant en java (en programmation tout court d'ailleur)

Voilà mon problème :

Je veux faire l'Addition de 2 entiers contenus dans 2 tableaux différents.
Si les tableaux sont de même taille, pas de problème car il suffit de faire l'addition case par case. Mais s'il sont de taille différentes (et c'est là mon problème), cela ne fonctionne plus du tout... Pourriez vous me dire ce qui cloche ?? Merci d'avance =D

public static  int[] Add( int []nb1 , int []nb2 ){
   
    int res[], retenue=0, somme=0, taille=nb1.length;
       
        res = new int [taille+1];       
   
        for(int i=taille-1, j=taille-1, k=taille ; k>0 ; i--, j--, k--) {
            somme = nb1[i]+nb2[j]+retenue;
            retenue = 0;
            if (somme>9) {
                retenue=1;
                res[k]=somme-10;
            }else res[k] = somme;
        }
       
        if (retenue==1) {
            res[0]=1;
            return res;
        }
       
        else {
            res [0]=0;
            return res;
        }
}

4 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Pourquoi cette variable retenue ?
Messages postés
6
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
11 novembre 2007

Car si le résultat est égal a un nombre > 9 (ex : 9+9=18), il faut seulement mettre 8 dans la case du tableau, et retenir 1 pour la case suivante...
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Est ce que c'est la nature de l'exercice qui exige ce retenu ou non?

En effet, comme le tableau stoke des entier de type int (4octets voir une plage de valeur de 0 à 2^32 - 1) tu peux stoker des nombres très grands sans se soucier de se retenu.

Mettons nous à la première situation et supposons que la nature du problème exige ça:
Première chose à faire c'est de réduire le type la taille des données; le type byte suffira pas besoin d'utiliser int.

// Pour simplifier le calcul on suppose que array1 est le tableau le plus long
public static byte[] sum(byte[] array1, byte[] array2) {
    if (array1.length < array2.length) {
       throw new IllegalArgumentException();
    }

    byte retenu = 0;
    byte[] returnArray = new byte[array1.length + 1];

    for (int i = 0; i < array1.length; ++i) {
          byte x = 0;
          if (i < array2.length) {
             x = array2[i];
          }
          returnArray[i] = (byte)(array1[i] + x + retenu);
          if (returnArray[i] > 9) {
             retenu = (byte)(returnArray[i]/10);
             returnArray[i] = (byte)(returnArray[i]%10);
          }
          else {
             retenu = 0;
          }
    }
    returnArray[array1.length] = retenu;
    return returnArray;
}

// Appel
byte[] a = ...;  // remplir a
byte[] b = ...;  // remplir b
byte[] c = null; // la somme sera calculer ici

if (b.length > a.length) {
    c = sum(b, a);
} else {
    c = sum(a, b);
}
Messages postés
6
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
11 novembre 2007

Effectivement, byte va suffire =D

Merci à toi, ça fonctionne !