Commits

Germano Gabbianelli committed cb70d8a

Aggiunta lunghezza in somma e moltiplica. Risolto il problema degli zeri.

Comments (0)

Files changed (1)

     public Numero somma(Numero numero) {
         NodoLista primo, risultato;
         int x = 0;
+        int lunghezza = 0;
 
         primo = risultato = new NodoLista();
 
             risultato = risultato.next = new NodoLista(x % 10, null);
             x = x / 10;
 
+            lunghezza++;
             nodo1 = nodo1.next;
             nodo2 = nodo2.next;
         }
             risultato = risultato.next = new NodoLista(x % 10, null);
             x = x / 10;
             
+            lunghezza++;
             nodo1 = nodo1.next;
         }
 
             risultato = risultato.next = new NodoLista(x % 10, null);
             x = x / 10;
 
+            lunghezza++;
             nodo2 = nodo2.next;
         }
-        if (x > 0)
+        if (x > 0) {
             risultato.next = new NodoLista(x, null);
+            lunghezza++;
+        }
 
-        return new Numero(primo.next, 1);
+        return new Numero(primo.next, lunghezza);
     }
 
     public Numero potenza(int esponente) {
             NodoLista nodo2 = numero.cifre;
 
             lunghezza = this.lunghezza + numero.lunghezza;
-            primo = appoggio = risultato = new NodoLista();
+            risultato = new NodoLista();
+            for (int i = 0; i < lunghezza; i++) {
+                risultato = new NodoLista(0, risultato);
+            }
+            primo = appoggio = risultato;
 
             while (nodo1 != null) {
+                risultato = appoggio;
+                appoggio = appoggio.next;
+
                 while (nodo2 != null) {
-                    risultato = successivo(risultato);
+                    risultato = risultato.next;
                     x = x + nodo1.info * nodo2.info + risultato.info;
                     risultato.info = x % 10;
                     x = x / 10;
                     nodo2 = nodo2.next;
                 }
                 if (x > 0) {
-                    successivo(risultato).info = x;
+                    risultato.next.info = x;
                     x = 0;
                 }
 
-                appoggio = appoggio.next;
-                risultato = appoggio;
-                
                 nodo1 = nodo1.next;
                 nodo2 = numero.cifre;
             }
 
+            if (risultato.next.info == 0) {
+                risultato.next = null;
+                lunghezza--;
+            }
             risultato = primo.next;
         } else {
             risultato = new NodoLista();
         return new Numero(risultato, lunghezza);
     }
 
-    private NodoLista successivo(NodoLista nodo) {
-        if (nodo.next == null)
-            nodo.next = new NodoLista();
-        return nodo.next;
-    }
-
     public boolean nonZero() {
         return (this.cifre.info != 0 || this.lunghezza > 1);
     }