Java Zahl in einzelne char oder strings zerlegen?

5 Antworten

Also wenn ich hier die vielen umständlichen Umwege sehe, muss ich mich doch mal einschalten. Es ist nur ein rein mathematischer 1-Zeiler nötig:

floor(log(n)/log(10))+1

denn der dekadische Log. liefert doch bereits die Stellenanzahl...

Alle anderen Umwege über Strings oder zig Teil-Modulos benötigen bei sehr großen Zahlen extrem viel Zeit und Speicher!

Für noch größere Zahlen hat JAVA den Typ BigInt mit Extra-Funktionen.

wenn Du nur die Anzahl der Stellen ermitteln willst, kannst Du das auch so machen:

wandel die Zahl in einen String um und ermittel die Länge des Strings !!!

z.B.

String s = String.valueOf(i);
int digits = s.length();



etliche Wege führen nach Rom !!! :D

Isendrak  08.09.2017, 22:31

etliche Wege führen nach Rom !!! :D

Alle Wege führen nach Rom! ;)

Nur (leider) führen manche über Karthago... ;)

0

Ich würde dir die Division durch 10 empfehlen. Damit kannst du immer eine Stelle kürzen.
Bei zahl als Integer:
500 -> 50 -> 5->0

while(zahl/10>0) {
zahl=zahl/10;
n=n+1;
}

Ansonsten:
500 -> 50 -> 5->(0.5<1)

while(zahl/10>1) {
zahl=zahl/10;
n=n+1;
}

TUrabbIT  22.01.2017, 19:10

Korrektur: while(zahl>0) bzw while(zahl>1) sonst wird ein Sprung ausgelassen.

0

Bzw. ganz einfach machst du es dir, mit dem Teilen durch 10 statt des Modulo.

Anbei ein Beispiel wie ich das ganze gelöst habe. Ich stelle kein Anspruch auf schönen Code in dem Beispiel ;)

 - (Computer, Technik, programmieren)
Snapstromegon  22.01.2017, 18:34

Gute Idee,

Eine kurze Lösung wäre:

public int length(int i){

for(int ret=1; true; ret++){

if(i<10) return ret;

else i/=10;

}

}

0

Du kannst Dir Arrays und ähnliches sparen. Wie so oft denkt man einfach zu kompliziert.

Arbeite hierbei am besten mit dem modulo 10.

So lange noch etwas da ist wird es durchgeführt so lange die Zahl größer als 9 ist.

Sag bescheid wenn ich tiefer ins Detail gehen soll oder Du noch andere Fragen hast.

MFG Souta


TUrabbIT  22.01.2017, 19:11

500 modulo 10 ist allerdings 0. du meinst /10

0