Newsgroup: it.comp.java
Titolo: il fattoriale di 800

Come mai mi da zero?
 
Ecco il codice:
 
 
 
public class Fattorial {
 
 
 
int calculate(int number) {
 
if (number < 0) {
 
throw new IllegalArgumentException("integer must be 0+");
 
}
 
if( number == 0) { return 1;
 
} else {
 
return number * calculate (number - 1);
 
}
 
}
 
public static void main(String[] args) {
 
Fattorial factorial = new Fattorial();
 
System.out.println(factorial.calculate(800));
 
}
 
}
 
 

 Come mai mi da zero?
 
il fattoriale di 800 è questo (fonte: 
http://it.numberempire.com/
 
factorialcalculator.php):
 
771053011335386004144639397775028360595556401816010239163410994033970851827093069367090769795539033092647861224230677444659785152639745401480184653174909762504470638274259120173309701702610875092918816846985842150593623718603861642063078834117234098513725265045402523056575658860621238870412640219629971024686826624713383660963127048195572279707711688352620259869140994901287895747290410722496106151954257267396322405556727354786893725785838732404646243357335918597747405776328924775897564519583591354080898117023132762250714057271344110948164029940588827847780442314473200479525138318208302427727803133219305210952507605948994314345449325259594876385922128494560437296428386002940601874072732488897504223793518377180605441783116649708269946061380230531018291930510748665577803014523251797790388615033756544830374909440162270182952303329091720438210637097105616258387051884030288933650309756289188364568672104084185529365727646234588306683493594765274559497543759651733699820639731702116912963247441294200297800087061725868223880865243583365623482704395893652711840735418799773763054887588219943984673401051362280384187818611005035187862707840912942753454646054674870155072495767509778534059298038364204076299048072934501046255175378323008217670731649519955699084482330798811049166276249251326544312580289357812924825898217462848297648349400838815410152872456707653654424335818651136964880049831580548028614922852377435001511377656015730959254647171290930517340367287657007606177675483830521499707873449016844402390203746633086969747680671468541687265823637922007413849118593487710272883164905548707198762911703545119701275432473548172544699118836274377270607420652133092686282081777383674487881628800801928103015832821021286322120460874941697199487758769730544922012389694504960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 
che dici, secondo te entra dentro un int?
 

 ha scritto nel messaggio 
news:ltc7bk$bk4$1@dont-> che <dici, secondo te entra dentro un int?
 
ho messo un double e da ancora zero 
 
 


Il double, ma anche il long, sono limitati ad una ventina di cifre, usa 
il BigInteger invece.
 
import java.math.BigInteger;
public class Fattorial {
   BigInteger calculate(BigInteger number) {
    if (number.compareTo(BigInteger.ZERO) < 0)
      throw new IllegalArgumentException("integer must be 0+");
    if (number.compareTo(BigInteger.ZERO) == 0)
      return BigInteger.ONE;
    else
      return number.multiply(calculate(number.subtract(BigInteger.ONE)));
   }
   public static void main(String[] args) {
     Fattorial factorial = new Fattorial();
     System.out.println(factorial.calculate(new BigInteger("800")));
   }
}
 
che ti restituisce un bel numero di 1977 cifre identico a quello 
calcolato da rootkit.
 


anche il tipo double non può rappresentare una cifra > Double.MAX_VALUE, 
fatto salvo che comunque le cifre significative sono assai meno.
devi usare BigInteger.