Betrachten Sie die Ziffern einer Integralbasis über einer, die in der angegebenen Reihenfolge aufgeführt sind. Teilen Sie sie wiederholt genau in zwei Hälften, bis jeder Ziffernblock eine ungerade Länge hat:
Base Digits Subdivided Digit Chunks
2 01 0 1
3 012 012
4 0123 0 1 2 3
5 01234 01234
6 012345 012 345
7 0123456 0123456
8 01234567 0 1 2 3 4 5 6 7
9 012345678 012345678
10 0123456789 01234 56789
11 0123456789A 0123456789A
12 0123456789AB 012 345 678 9AB
...
16 0123456789ABCDEF 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
Lesen Sie nun für jede Zeile in dieser Tabelle die unterteilten Ziffernblöcke als Zahlen in der Basis dieser Zeile und summieren Sie sie. Geben Sie das Ergebnis der Einfachheit halber in Basis 10 an.
Zum Beispiel...
- Für Basis 3 gibt es nur eine zu summierende Zahl: 012 3 = 12 3 = 5 10
- Für Basis 4 gibt es 4 Zahlen zu summieren: 0 4 + 1 4 + 2 4 + 3 4 = 12 4 = 6 10
- Basis 6: 012 6 + 345 6 = 401 6 = 145 10
- Basis 11: 0123456789A 11 = 2853116705 10
Herausforderung
Schreiben Sie ein Programm, das eine ganze Zahl größer als eins als Basis verwendet und diese Unterteilungssummenprozedur ausführt, wobei die endgültige Summe in Basis 10 ausgegeben wird . (Wenn also der Eingang 3der Ausgang ist 5, wenn der Eingang 6der Ausgang ist 145, usw.)
Schreiben Sie entweder eine Funktion, die eine Ganzzahl (oder eine Zeichenfolge, da die Zahlen ziemlich groß werden können) annimmt und zurückgibt, oder verwenden Sie stdin / stdout, um die Werte einzugeben und auszugeben.
Der kürzeste Code in Bytes gewinnt.
Anmerkungen
- Sie können alle integrierten oder importierten Basiskonvertierungsfunktionen verwenden.
- Es gibt keine Obergrenze für den Eingabewert (außer einer vernünftigen
Int.Max). Die Eingabewerte hören nicht bei 36 auf, nur weil "Z" dort stoppt .
.
.
.