Algorithmus, Zahl in andere Basis konvertieren (26, ->Buchstaben)

DarthShader

Erfahrenes Mitglied
Hallo zusammen

ich sitze hier gerade an einem kleinen Problem, und ich finds fast lächerlich, dass ich es einfach nicht gebacken bekomme: es geht um eine Zahlenkovertierung in eine andere Basis.

Nehmen wir an, die Buchstaben A bis Z seien durchnummeriert von 1 bis 26, repräsentieren also ihre Position im Alphabet.

Nun habe ich die Zahl 1, welche kovertiert würde zu A, 2 = B, 3 = C, Z = 26 usw...
Die Zahl 27 würde durch AA repräsentiert, 28 = AB etc...

Ich versuche gerade eine Methode zu schreiben, die mir diese Konvertierung ermöglicht, also als Signatur quasi

public String numToString( int num );

schaffe es aber nicht, sie fehlerfrei hinzubekommen.

Kann mir jemand den Algorithmus mal schriftlich skizzieren oder bissl Pseudocode geben, vllt. hat ja jemand schon ein (mögl. ähnliches) funktionierendes Beispiel?


Vielen Dank!
 
Hallo,

einfachste Methode ist du legst eine Array mit alle deine Buchstaben an und dann musst du nachher einfach mit num-1 drauf zugreifen und die Buchstaben rausholen wie z.B.

public String numToString( int num ) {
String[] buchstaben = {"A","B","C","D","E" usw.

return buchstaben[num-1];


}

Sobald du dann über 26 kommst dann musst du nur noch String buchstabe = buchstaben[26] + buchstaben[27]; machen.
 
Zuletzt bearbeitet:
Java:
public String numToString(int num) {
	StringBuilder sb = new StringBuilder();
	while (num > 0) {
		  sb.append((char)('A' + num % 26));
		  num /= 26;
	}
	return sb.reverse().toString();
}
Mit den Zuordnungen A = 0, B = 1, ..., Z = 25

Grüße,
Matthias
 
Hi.
Java:
public String numToString(int num) {
	StringBuilder sb = new StringBuilder();
	while (num > 0) {
		  sb.append((char)('A' + num % 26));
		  num /= 26;
	}
	return sb.reverse().toString();
}
Mit den Zuordnungen A = 0, B = 1, ..., Z = 25
So einfach ist es leider nicht. Denn dieses System entspricht nicht unseren normalen Zahlensystemen. Wenn A = 0 ist, kann AA nicht 26 sein.

D.h. bei deiner Funktion wird 0 durch einen Leerstring repräsentiert, 1 dann durch B usw. Die Zahl 26 dann durch BA. Es sollte aber etwas anderes herauskommen.

Gruß
 
So einfach ist es leider nicht. Denn dieses System entspricht nicht unseren normalen Zahlensystemen. Wenn A = 0 ist, kann AA nicht 26 sein.
Hab auch nie behauptet, dass mit meiner Zuordnung AA 26 entspricht ;) Aber irgendein Zeichen muss nun mal die Wertigkeit 0 aufweisen.

D.h. bei deiner Funktion wird 0 durch einen Leerstring repräsentiert, 1 dann durch B usw. Die Zahl 26 dann durch BA. Es sollte aber etwas anderes herauskommen.
Das mit dem Leerstring könnte man als Sonderfall abfangen und "A" zurückgeben. Ansonsten ist die Konvertierung 26 -> BA konform zu der von mir angegebenen Zuordnung von Zeichen zu ihren Wertigkeiten. Ich habe mir eben erlaubt, diese gegenüber dem Vorschlag des OP entsprechend anzupassen, da ein Zeichen mit Wertigkeit 0 fehlte.

Grüße,
Matthias
 
Hi.
Hab auch nie behauptet, dass mit meiner Zuordnung AA 26 entspricht ;) Aber irgendein Zeichen muss nun mal die Wertigkeit 0 aufweisen.


Das mit dem Leerstring könnte man als Sonderfall abfangen und "A" zurückgeben. Ansonsten ist die Konvertierung 26 -> BA konform zu der von mir angegebenen Zuordnung von Zeichen zu ihren Wertigkeiten. Ich habe mir eben erlaubt, diese gegenüber dem Vorschlag des OP entsprechend anzupassen, da ein Zeichen mit Wertigkeit 0 fehlte.
Früher in der Schule gab's für sowas eine 6 - mit dem Hinweis die Aufgabe richtig zu lesen. ;-)

Gruß
 
Hallo,

also ich verstehe nicht, warum man dafür ne 6 bekommen sollte? Nur weil A = 0 ist? Davon bekommt der Anwender doch eh nichts mit und ein Array beginnt nunmal mit dem Index 0 in über 50% der Programmiersprachen. Wenn ich die Aufgabe richtig verstehe gibt der Anwender eine beliebige Zahl ein und soll dann die Buchstaben ausgespuckt bekommen.

Gruß KlaDi.
 
Hi.
Hallo,

also ich verstehe nicht, warum man dafür ne 6 bekommen sollte? Nur weil A = 0 ist? Davon bekommt der Anwender doch eh nichts mit und ein Array beginnt nunmal mit dem Index 0 in über 50% der Programmiersprachen.
Das hat doch mit dem Array nichts zu tun (zumal gar kein Array verwendet wurde). Auch habe ich nicht bemängelt das A = 0 ist - das kann man ja so machen (obwohl A eigentlich 1 sein sollte - was der Anwender sehr wohl bemerken wird). Nur wenn man 0 eingibt kommt ein Leerstring raus - das Ergebnis sollte dann aber "A" sein. Außerdem sollte dann AA = 26 sein - der String AA wird aber durch den Code von Matthias nie generiert.
Wenn ich die Aufgabe richtig verstehe gibt der Anwender eine beliebige Zahl ein und soll dann die Buchstaben ausgespuckt bekommen.
Ich glaube du hast die Aufgabe nicht richtig verstanden. Der Anwender soll eine beliebige Zahl eingeben, und dann ein bestimmtes Ergebnis ausgegeben bekommen - nicht irgendeine Ansammlung von Buchstaben, sondern so wie die Aufgabe es fordert. In einem Schulaufsatz muß man auch nur Text der deutschen Sprache in grammatikalisch, orthografisch richtiger Form schreiben - wenn aber das Thema verfehlt ist, bekommt man dafür keine gute Note.

Gruß
 
Danke deepthroat, Du drückst aus was ich beim lesen der meisten Antworten hier denke :-)

Also nochmal, es geht nicht um irgendein Array, oder dass ein Array normal mit 0 beginnt (was mir durchaus bewusst ist). Ich brauche eine Abbildung von 1 auf A, 2 auf B, Z auf 26, AA auf 27 .

Denn AA = A*26^1 + A*26^0 = 26 + 1 = 27

@Matthias Reitinger: könntest Du Dir irgendwie eine Abänderung Deines Codes vorstellen, damit mein Problem richtig gelöst wird?

@deepthroat: Ich habe auch in den anderen Thread geschaut, den Du vorgeschlagen hast. Den C++ code, den Du als letztes gepostet hattest, funktioniert der so, dass es mein Problem löst? Meinst Du ich könnte den quasi 1 zu 1 nach Java portieren?
 
Zurück