Was ist der schnellste Weg,Was ist der schnellste Weg, um die höchste Dezimalstelle einer ganzen Zahl zu erhalten?
template <typename T>
unsigned highest_decimal_digit(T x);
(die beispielsweise 3 für 356431, 7 für 71 und 9 für 9 zurückkehrt) zu implementieren?
Das Beste, was ich denken kann ist:
- constexpr-Berechnung die „mittlere Größe“ Leistung von 10, die in T. paßt
- eine binäre Suche durchführt (über die Befugnisse von 10, möglicherweise Verwenden einer consExpr-konstruierten Nachschlagetabelle, um p zu finden, die höchste Potenz von 10 niedriger als x.
- return x von p geteilt
... aber vielleicht gibt es einen anderen Ansatz.
Hinweise:
- drückte ich die Frage und meinen Ansatz in C++ 14ish Bedingungen, und eine Lösung im Code wäre schön, aber eine abstrakte Lösung (oder sogar eine Lösung in x86_64 Montage) wäre in Ordnung. Ich möchte jedoch etwas, das für alle (unsigned) Integer-Typen funktioniert.
- Sie können signierte Integraltypen ignorieren.
- Ich habe nicht angegeben, was "schnell" ist, aber bitte Hardware-bewusst sein.
Ist die Verwendung von Strings nicht erlaubt ?? ..... – yobro97
@manlio in der Tat, und sogar die beste Antwort entspricht mir: P – Vesper
@ yobro97: Es gibt keine Möglichkeit, dass jede Arbeit mit Strings für eine schnelle Lösung ermöglicht. – einpoklum