Zahl in Ihre Einzelteile zerlegen?

Wenn es wirklich um einzelne Ziffern geht ist man mit mod 10 und ganzzahliger Division durch 10 wahrscheinlich wesentlich performanter...

Mhmm... mit dieser Aussage wäre ich vorsichtig. Je nach Länge der Zahl wäre die Typenumwandlung nach String mit folgenden Zählerdurchlauf sehr viel schneller als das Rekursionsverfahren (welches ich aber dennoch als wesentlich eleganter ansehe) mit 2n Berechnungen, da beim String nur in den Adressen, bzw einem Array von chars gesprungen werden muss...
 
Richtige Überlegung. Wenn ich allerdings davon ausgehe, dass String.valueOf einen neuen String erzeugt (was ich nicht genau weiß, jedoch den Worstcase annehme), ist das schon nicht ohne. Allerdings bewegen wir uns hier wirklich im Bereich der Microoptimierung. Vielleicht hätte ich den Performancesatz nicht so prominent vorn anstellen sollen. Mir ging es eher darum, den mathematischeren Weg aufzuzeigen. IMHO schlägt man zu oft zu schnell mit Stringfrickeleien nach solchen Problemen (wobei, die natürlich trotzdem das Problem lösen...).

Gruß
Ollie
 
Moin,

ich finde es sehr gut (ob nun Microoptimierung oder nicht), solche ideen wie Oli sie vorschlägt zu posten.

Im Alltag vergisst man sehr oft die netten Möglichkeiten zu nutzen, die z.B. rekursive Programmierung bietet.

Meistens ist Rekursion schneller meine ich - in diesem Fall z.B. glaube ich nicht dass zusätzliche Initialisierungen von Strings etc. hier allzu nachteilig für die Performance sind.

Gruß Tim
 
Hmmm, wenn wir gerade bei unterschiedlichen Lösungsmöglichkeiten sind, hier ist eine ohne Strings, von der mich die Performance interessieren würde:

Code:
int wert = 12345;

// hier noch wert = 0 abfangen! ...

// Länge des Integerwertes.
int d = (int) Math.log10( Math.abs(wert) ) + 1;

// Rückgabearray mit den einzelnen Ziffern.
int[] ziffern = new int[d];

while (wert != 0)
   {
   ziffern[--d] = wert % 10;
   wert /= 10;
   }

// ziffern[0] = 1
// ziffern[1] = 2
// ziffern[2] = 3
// ziffern[3] = 4
// ziffern[4] = 5
 
Hier noch eine Möglichkeit!
Code:
 int zahl = 185494589;
    ArrayList<Integer> liste = new ArrayList<Integer>();
    for(int i=(""+zahl).length(); i>0;i--)
    {
        liste.add(0, zahl%10);
        zahl=(zahl-zahl%10)/10;
    }
Das Ergebnis steht in liste.
 

Neue Beiträge

Zurück