Das Problem besteht darin, eine Formel abzuleiten, um die Anzahl der Stellen zu bestimmen, die eine gegebene Dezimalzahl in einer gegebenen Basis haben könnte. Beispiel: Die Dezimalzahl 100006 kann durch 17,11,9,8,7,6,8 Ziffern in den Basen 2,3,4,5,6,7,8 dargestellt werden.Wie viele Ziffern in dieser Basis?
Well der Formel I bisher abgeleitet ist wie folgt: (log10 (num)/log10 (base)) + 1.
in C/C++ I diese Formel benutzt, um die oben angegebenen Ergebnisse zu berechnen.
long long int size = ((double)log10(num)/(double)log10(base)) + 1.0;
Aber leider ist die Formel nicht richtige Antwort gibt es einige Fälle, wie diese:
Number 8 in base 2 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 64 in base 2 : 1,0,0,0,0,0,0
Number of digits: 7
Formula returned: 6
Number 64 in base 4 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 125 in base 5 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 128 in base 2 : 1,0,0,0,0,0,0,0
Number of digits: 8
Formula returned: 7
Number 216 in base 6 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 243 in base 3 : 1,0,0,0,0,0
Number of digits: 6
Formula returned: 5
Number 343 in base 7 : 1,0,0,0
Number of digits: 4
Formula returned: 3
So ist der Fehler von 1 digit.I ist nur mir jemand helfen will, die zu korrigieren Formel so, dass es für alle möglichen Fälle funktioniert.
Bearbeiten: Gemäß der Eingabespezifikation habe ich mit Fällen wie 10000000000, d. H. 10^10, ich glaube nicht, log10() in C/C++ kann solche Fälle behandeln? Daher wird jede andere Prozedur/Formel für dieses Problem sehr geschätzt.
Es sieht aus wie Sie von einem Problem auf dem Rand Fällen ein Off haben. – StrixVaria
Ich habe das in der Schule auf meinem Rechner gemacht; Ich vergesse die Formel, die ich damals benutzt habe, aber als ich die 'log()' Funktion gelernt habe, war ich, wow, das ist viel einfacher! –
ja, aber nicht in der Lage, die erforderliche Modifikation herauszufinden. –