El problema es derivar una fórmula para determinar el número de dígitos que un número decimal dado podría tener en una base determinada.¿Cuántos dígitos hay en esta base?
Por ejemplo: El número decimal 100006 se puede representar por 17,11,9,8,7,6,8 dígitos en bases 2,3,4,5,6,7,8 respectivamente.
Bien la fórmula I derivado hasta ahora es así: (log10 (num)/log10 (base)) + 1.
en C/C++ utilicé esta fórmula para calcular los resultados dados anteriormente.
long long int size = ((double)log10(num)/(double)log10(base)) + 1.0;
Pero, lamentablemente, la fórmula no está dando respuesta correcta es algunos casos, como estos:
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
Así que el error es de 1 digit.I sólo quiero a alguien que me ayude a corregir la fórmula para que funcione para todos los casos posibles.
Editar: De acuerdo con la especificación de entrada tengo que hacer frente a casos como 10 mil millones, es decir 10^10, no creo log10() en C/C++ puede manejar este tipo de casos? Entonces, cualquier otro procedimiento/fórmula para este problema será muy apreciado.
Parece que estás teniendo un desajuste de una cuestión sobre los casos extremos. – StrixVaria
Solía hacer esto en la escuela en mi calculadora; Olvidé la fórmula que usaba en ese momento, pero cuando me enseñaron la función 'log()', era como, ¡wow, esto es mucho más simple! –
sí, pero no se puede averiguar la modificación requerida. –