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

@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?
Ja, allerdings gehe ich dort auch davon aus das A = 0 ist. Das läßt sich allerdings recht einfach lösen: Du mußt nur die Inkrementierung des Parameters "value" weglassen.
Meinst Du ich könnte den quasi 1 zu 1 nach Java portieren?
Ganz bestimmt.

Gruß
 
Hallo!
Hier mal ein kleiner Vorschlag von mir:
Java:
public String intToString(int number)
	{
		StringBuffer sb = new StringBuffer();
		
		while(number > 26)
		{
			sb.append("A");
			number -= 26;
		}
		
		sb.append(chars[number-1]);
		
		return sb.toString();
	}
	
	private String[] chars = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

Code:
intToString(1) = A
intToString(26) = Z
intToString(27) = AA
intToString(28) = AB

mfg flo
 
Früher in der Schule gab's für sowas eine 6 - mit dem Hinweis die Aufgabe richtig zu lesen. ;-)
Früher in der Schule hätte ich in dem Fall eine Nichtwertung der Aufgabe wegen widersprüchlicher Aufgabenstellung beantragt ;-) Mit der Konvertierung in ein Stellenwertsystem anderer Basis hat der beschriebene Algorithmus nämlich nichts zu tun.

Man muss aber trotzdem nicht viel abändern, um das gewünschte Verhalten zu erzielen:
Java:
public String intToString(int num) {
	final char[] letters = {
		'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
		'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
		'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
	};
	final int c = letters.length;
	
	StringBuilder sb = new StringBuilder();
	while (num > 0) {
		num--;
		sb.append(letters[num % c]);
		num /= c;
	}
	
	return sb.reverse().toString();
}

Grüße,
Matthias
 
Ich probiers auch mal ...

Java:
  public String numToAlp(long num)
  {
    String retVal = "";
    if(num > 26)
      retVal = numToAlp((int)(num / 26));
    retVal = retVal + (char)(((num - 1) % 26) + 65);

    return retVal;
   }

ergibt:

System.out.println( test.numToAlp(1) ); -> A
System.out.println( test.numToAlp(26) ); -> Z
System.out.println( test.numToAlp(27) ); -> AA
System.out.println( test.numToAlp(53) ); -> BA

Was bekomme ich für eine Note

Dirk

@Matthias - ich hatte meinen Code aus einem Excel VBA modul entnommen - da gibts keine StringBuffer ... - für java würde ich eher deinen Code nehmen, der ist bissel schicker :( ..
 
Zuletzt bearbeitet:
Früher in der Schule hätte ich in dem Fall eine Nichtwertung der Aufgabe wegen widersprüchlicher Aufgabenstellung beantragt ;-)
Ok, genehmigt (*grummel*) ;)

Man muss aber trotzdem nicht viel abändern, um das gewünschte Verhalten zu erzielen: ...
Ja, das ist mal eine sehr schöne Lösung.

Niederbobi hat gesagt.:
Was bekomme ich für eine Note
Also eigentlich eine 1, aber angesichts der Lösung von Matthias nur eine 2+ ;-)

Gruß
 
Zurück