Ich muss alle palindromischen Zahlen für eine gegebene Zahlenbasis (die in der Lage sein sollte, bis zu 10.000 zu sein) in einem gegebenen Bereich erzeugen. Ich brauche einen effizienten Weg, es zu tun.Generieren Sie alle Palindromic-Zahlen in einem gegebenen Zahlensystem?
Ich stolperte über this answer, die direkt mit der Basis 10 verwandt ist. Ich versuche, es zu adaptieren für „alle“ Grundlagen zu arbeiten:
public static Set<String> allPalindromic(long limit, int base, char[] list) {
Set<String> result = new HashSet<String>();
for (long i = 0; i <= base-1 && i <= limit; i++) {
result.add(convert(i, base, list));
}
boolean cont = true;
for (long i = 1; cont; i++) {
StringBuffer rev = new StringBuffer("" + convert(i, base, list)).reverse();
cont = false;
for (char d : list) {
String n = "" + convert(i, base, list) + d + rev;
if (convertBack(n, base, list) <= limit) {
cont = true;
result.add(n);
}
}
}
return result;
}
convert()
Methode konvertiert eine Zahl in einer String-Darstellung dieser Zahl in einer gegebenen Basis eine Liste von Zeichen für Ziffern.
convertBack()
wandelt die Zeichenfolgendarstellung einer Nummer 10.
Beim Testen meine Methode zum Boden 10, ist es auslässt zweistelliger Palindrome und auslässt dann die Nächsten zurück zur Basis sind 1001,1111,1221 ... und so weiter.
Ich bin mir nicht sicher warum.
Hier sind die conversion methods bei Bedarf.
Es stellt sich heraus, dies wird langsamer mit meinem anderen Code wegen der ständigen Umwandlungen, da ich die alle Zahlen in Ordnung und in dezimal muß. Ich bleibe einfach dabei, über jede Ganzzahl zu iterieren und sie in jede Basis zu konvertieren und dann zu überprüfen, ob es ein Palindrom ist.
'Integer.parseInt' hat eine Überladung mit' base' Parameter, um eine Zeichenkette irgendeiner Basis in eine Ganzzahl zu konvertieren, also 'Integer.toString', Sie müssen keine Umrechnungsmethoden selbst schreiben – niceman
@niceman [Max radix] (http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#MAX_RADIX) = 36: Ich kann nicht zu Basen über 36 konvertieren Wenn ich das benutze. Wenn der Wert unter Min Radix oder Max Radix liegt, wird stattdessen der Wert 10 verwendet. – Vepir
hmmm einverstanden ... – niceman