Commits

Germano Gabbianelli committed 1237ab4

File iniziali

Comments (0)

Files changed (4)

+syntax:glob
+*.class
+*~
+.*.swp

Calcolatrice.java

+class Calcolatrice {
+    public static void main(String[] args) {
+        Numero a, b, c;
+        a = new Numero("9324");
+        b = new Numero("2341");
+        c = a.moltiplica(b);
+        // System.out.println(a + " + " + b + " == " + c);
+
+        a = new Numero("3999");
+        b = new Numero("2111");
+        c = a.moltiplica(b);
+        System.out.println(a + " * " + b + " == " + c);
+        // System.out.println(a.potenza(3));
+
+    }
+}
+class NodoLista {
+
+    public int info;
+    public NodoLista next;
+
+    public NodoLista() {
+        this.next = null;
+    }
+
+    public NodoLista(int info, NodoLista next) {
+        this.info = info;
+        this.next = next;
+    }
+
+    public int getLunghezza() {
+        int lunghezza = 0;
+        NodoLista nodo = this;
+        while (nodo != null) {
+            lunghezza++;
+            nodo = nodo.next;
+        }
+        return lunghezza;
+    }
+
+    public boolean equals(NodoLista nodo) {
+        NodoLista me = this;
+
+        while (me != null && nodo != null) {
+            if (me.info == nodo.info) {
+                if (me.next == nodo.next)
+                    return true;
+            } else {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public static NodoLista daArray(int[] oggetti) {
+        NodoLista primo, nodo;
+
+        primo = nodo = new NodoLista();
+        
+        for (int i = 0; i < oggetti.length; i++) {
+            nodo.info = oggetti[i];
+            nodo = nodo.next = new NodoLista();
+        }
+        return primo;
+    }
+            
+}
+class Numero {
+    public NodoLista cifre;
+    public int lunghezza;
+
+    public Numero(String numero) {
+        int cifra = Character.getNumericValue(numero.charAt(0));
+        NodoLista nodo = new NodoLista(cifra, null);
+        int lunghezza = 1;
+
+        for (int i = 1; i < numero.length(); i++) {
+            cifra = Character.getNumericValue(numero.charAt(i));
+            nodo = new NodoLista(cifra, nodo);
+            lunghezza++;
+        }
+        this.cifre = nodo;
+        this.lunghezza = lunghezza;
+    }
+
+    private Numero(NodoLista cifre, int lunghezza) {
+        this.cifre = cifre;
+        this.lunghezza = lunghezza;
+    }
+
+    public String toString() {
+        String rappr = "";
+        NodoLista cifra = this.cifre;
+
+        while (cifra != null) {
+            rappr = cifra.info + rappr;
+            cifra = cifra.next;
+        }
+        return rappr;
+    }
+
+    public Numero somma(Numero numero) {
+        NodoLista primo, risultato;
+        int x = 0;
+
+        primo = risultato = new NodoLista();
+
+        NodoLista nodo1 = this.cifre;
+        NodoLista nodo2 = numero.cifre;
+
+        while (nodo1 != null && nodo2 != null) {
+            x = x + nodo1.info + nodo2.info;
+            risultato = risultato.next = new NodoLista(x % 10, null);
+            x = x / 10;
+
+            nodo1 = nodo1.next;
+            nodo2 = nodo2.next;
+        }
+
+        while (nodo1 != null) {
+            x = x + nodo1.info;
+            risultato = risultato.next = new NodoLista(x % 10, null);
+            x = x / 10;
+            
+            nodo1 = nodo1.next;
+        }
+
+        while (nodo2 != null) {
+            x = x + nodo2.info;
+            risultato = risultato.next = new NodoLista(x % 10, null);
+            x = x / 10;
+
+            nodo2 = nodo2.next;
+        }
+        if (x > 0)
+            risultato.next = new NodoLista(x, null);
+
+        return new Numero(primo.next, 1);
+    }
+
+    public Numero potenza(int esponente) {
+        Numero risultato = this;
+        while (esponente > 1) {
+            risultato = risultato.moltiplica(this);
+            esponente--;
+        }
+        return risultato;
+    }
+
+    public Numero moltiplica(Numero numero) {
+        NodoLista risultato;
+        int lunghezza = 1;
+
+        if (nonZero() && numero.nonZero()) {
+            NodoLista primo, appoggio;
+            int x = 0;
+
+            NodoLista nodo1 = this.cifre;
+            NodoLista nodo2 = numero.cifre;
+
+            lunghezza = this.lunghezza + numero.lunghezza;
+            primo = appoggio = risultato = new NodoLista();
+
+            while (nodo1 != null) {
+                while (nodo2 != null) {
+                    risultato = successivo(risultato);
+                    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;
+                    x = 0;
+                }
+
+                appoggio = appoggio.next;
+                risultato = appoggio;
+                
+                nodo1 = nodo1.next;
+                nodo2 = numero.cifre;
+            }
+
+            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);
+    }
+
+    public boolean equals(Numero numero) {
+        return this.cifre.equals(numero.cifre);
+    }
+}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.