anonymous
2010-11-20 04:16:29 UTC
Il file MyBigInteger.java deve contenere una classe MyBigInteger (non estendibile) che realizzi l'ADT (immutabile) MyBigInteger.
Le intestazioni dei costruttori e dei metodi devono essere le seguenti (notate che sono analoghi ad alcuni costruttori e metodi della classe BigInteger, alla cui documentazione dovete riferirvi per ricavare le specifiche dei metodi):
public MyBigInteger(String val);
public MyBigInteger(String val, int radix);
public MyBigInteger add(MyBigInteger val);
public MyBigInteger multiplyIngenua(MyBigInteger val);
public MyBigInteger multiplyItaliana(MyBigInteger val);
public MyBigInteger multiplyRussa(MyBigInteger val);
public boolean equals(Object o);
public int compareTo(Object o);
public int compareTo(MyBigInteger val);
public String toString();
I metodi "multiplyIngenua", "multiplyItaliana", MultiplyRussa" si riferiscono, rispettivamente, a tre diversi algoritmo per effettuare la moltiplicazione di due numeri interi:
l'algoritmo di moltiplicazione per somme successive,
l'algoritmo di moltiplicazione insegnato nelle scuole elementari Italiane, e
l'algoritmo di moltiplicazione insegnato (pare, non e' sicuro) nelle scuole elementari Russe.
Per rappresentare i dati utilizzate i campi:
final static long RADIX = ... /* base utilizzata dalla rappresentazione,
2 <= RADIX <= Integer.MAX_VALUE + 1,
((RADIX - 1) * (RADIX - 1)) + (RADIX - 1) <= Long.MAX_VALUE */
int[] digits; /* le cifre del numero (la cifra meno significativa si trova in posizione 0),
digits.length > 0,
per ogni indice i di digits, digits[i] representa l'i-esima cifra (in base RADIX)
del numero rappresentato */
int sign; /* segno del numero: 1 se positivo, 0 se zero, e -1 se negativo */
La classe MyBigInteger deve essere documentata in stile javadoc e corredata con gli invarianti di struttura.