# Fakultät- Programm programmieren



## JAVA_FFM (16. Nov 2010)

Servus Leute,

ich habe ein kleines Anliegen und zwar soll ich in der Uni ein Programm über Eclipse schreiben, mit dem ich Fakuläten bis zur Zahl 1000 berechnen kann. Problem dabei die große Zahlenmenge, da ich das
Programm in integer schreiben soll. Bis zur Zahl 20 funktioniert es auch ganz gut aber von da an spinnt alles total, ich hab keine Ahnung wie ich mit dem "Überlauf " umgehen soll.
Mein Prof hat jetz gemeint ich soll mit Arrays arbeiten und zwar so, dass das Programm jeweils 3 zahlen in einem Slot speichert und den Übertrag auf die nächsten Slots übeträgt, im nächsten Schritt wird dann der letzte bzw. erste Slot mit der neuen Zahl multipliziert und der Übertrag wieder auf die nächsten Slot übertragen..

also ich hab es so verstanden (pseudocode):

i=1
temp= Zahl_*m
Zahl="letze 3 Stellen von temp"
--- Übertrag behandeln ----
i<1000; i++


nur weiß ich nicht wie ich dass definiere dass jeweils 3 stellen nur behandelt werden bzw. jeweils nur 3 stellen in einem Slot gespeichert werden und auch nicht wie ich das Übertrag behandel.

Hat vlt jemand eine Idee wo ich ansetzten kann, bzw. was genau ich verstehen und lernen sollte?

mfG



PS: angeblich ist der Algorithmus nur wenige Zeilen lang..... :bahnhof:_


----------



## Der Müde Joe (16. Nov 2010)

BigInteger


----------



## ARadauer (16. Nov 2010)

nö er soll ein array für die zahl verwenden...

hier haben wir schon drüber diskutiert...

http://www.java-forum.org/java-basics-anfaenger-themen/107796-fakultaet1000.html

ich würde am anfang mal versuchen das zu lösen in dem du nur eine stelle pro array platz hälst... dann multipliziertst du einfach mit übertrag wie in der volksschule...


----------



## Andi_CH (16. Nov 2010)

Ist die Frage kezerisch?
Wer mag den Beweis führen dass JavaNoob77 und JAVA_FFM nicht dieselbe Person sind ???:L


----------



## JAVA_FFM (16. Nov 2010)

ja biginterger darf ich ja eben nich benutzen...
ja die diskussion hab ich mich schon angeschaut bin aber nich ganz schlau draus geworden.
gut das mit dem array habe ich glaub ich mehr oder weniger verstanden nur das mit dem übertrag nicht,
wie multiplizieren ich den wo drauf


----------



## JAVA_FFM (16. Nov 2010)

nicht die gleiche person aber auf der gleichen uni mit dem gleichen problem wies aussieht..


----------



## JAVA_FFM (16. Nov 2010)

wär cool wenn mir jemand unabhängig von der anderen diskussion helfen könnte


----------



## Andi_CH (16. Nov 2010)

ARadauer hat gesagt.:


> nö er soll ein array für die zahl verwenden...
> 
> hier haben wir schon drüber diskutiert...
> 
> ...



ARadauer hat dir schon geholfen! Das Problem wurde letzte Woche gelöst.


----------



## ARadauer (16. Nov 2010)

JAVA_FFM hat gesagt.:


> wär cool wenn mir jemand unabhängig von der anderen diskussion helfen könnte



naja... so schwer ist das nicht... man multiplziert eine ziffer mit dem multiplikator, schreibt die Einerstelle (das ist modulo 10) und als übertrag nimmt an die zehner stelle (das ist / 10)


```
import java.util.Arrays;

public class Test {
   public static void main(String[] args) {
      int[] zahl = {0,0,8,4,6};
      mulitiplizierenWieInDerVolksschule(zahl, 3);
      System.out.println(Arrays.toString(zahl));
   }
   
   public static void mulitiplizierenWieInDerVolksschule(int[] zahl, int multi){
      int uebertrag = 0;
      for(int i = zahl.length-1; i>=0; i--){
         int ergebnis = zahl[i]*multi+uebertrag;
         System.out.println(zahl[i]+ " mal "+multi +" plus "+ uebertrag+" ist "+ergebnis);
         int rest = ergebnis %10;
         uebertrag = ergebnis /10;
         zahl[i] = rest;
        
         System.out.println("wir schreiben "+rest+", "+uebertrag+" weiter");
         
      }
   }
}
```


nimmt man nicht jetzt ein array mit der länge 5, sondern 5000 kann mah zahlen mit 5000 stellen multiplzieren :shock:, was mit Int nicht möglich ist... :applaus:

jetzt bringt man natürlich in so ein arrayfeld nicht nur 0-9 rein sonder größere zahlen, so kann man das noch etwas optimieren... also wo dein lehrer von 3 stellen gesprochen hat, kannst du wo ich durch 10 dividiere natürlich durch 1000 dividieren...


aber ganz ehrlich... so schwer war das jetzt nicht... oder?


----------



## ARadauer (16. Nov 2010)

wie viel ist  99998887777666655554444333322221111 mal 3?
das kann ich ja nicht mal aussprechen geschweige denn das es excel richtig berechnet... mein programm kann es!


```
import java.util.Arrays;

public class Test {
   public static void main(String[] args) {
      int[] zahl = {0,0,9999,8888,7777,6666,5555,4444,3333,2222,1111};
      mulitiplizierenWieInDerVolskschule(zahl, 3);
      System.out.println(Arrays.toString(zahl));
   }
   
   public static void mulitiplizierenWieInDerVolskschule(int[] zahl, int multi){
      int uebertrag = 0;
      for(int i = zahl.length-1; i>=0; i--){
         int ergebnis = zahl[i]*multi+uebertrag;
         System.out.println(zahl[i]+ " mal "+multi +" plus "+ uebertrag+" ist "+ergebnis);
         int rest = ergebnis %1000;
         uebertrag = ergebnis /1000;
         zahl[i] = rest;
        
         System.out.println("wir schreiben "+rest+", "+uebertrag+" weiter");
         
      }
   }
}
```
geil!

(wobei bei der ausgabe eine 4 natürlich als 0004 zu sehen ist)


----------



## JAVA_FFM (16. Nov 2010)

vielenn dank langsam fang ichs an zu verstehenn  gut ich versuch das mal auf meine fakultät umzuschreiben hoffe das klappt mehr oder weniger.. auf jedenfall nochmal en fettes danke für die schnelle antwort


----------

