El otro día, mi profesor de química nos estaba explicando acerca de la notación científica (usando un número pequeño y multiplicándolo por potencias de diez para expresar números grandes con mayor facilidad), lo que me llevó unos años a cuando lo aprendí por primera vez. Después de aprender los conceptos básicos, hicimos un montón de preguntas típicas de matemáticas, algunas de las cuales fueron las siguientes:
Representa lo siguiente en notación científica:
a) 50000000
b) 120000000000000
c) 90000000000000000000000000000000000000
d) pi ^ e ^ i ^ j ^ k ^ std :: vector
...
z) 200
...
Y pensé: "¿Qué? ¡Nos dijeron que la notación científica se usaba para que la escritura de grandes números fuera más eficiente, pero algunos casos no son más eficientes en absoluto!"
Considera el número
300
y su representación en notación científica:
3x10^2
¿Qué, la versión científicamente notada realmente ocupa más espacio? No podemos tener eso ahora, ¿verdad? (El espacio en la pantalla es precioso.)
Podríamos determinar si es más eficiente el espacio para escribir un número en notación científica o no, o ...
Tarea
Su programa o función debe tomar como entrada un único número positivo n
de tamaño arbitrario (hasta lo que admite su idioma) y generar la versión del número con notación científica.
Sin embargo, si el número original n
, después de eliminar los ceros al final y el lugar decimal al final, toma menos o la misma cantidad de caracteres para mostrar que su versión notada científicamente, debe generar ese número original n
.
Su código debe ser lo más corto posible porque la salida también debe ser lo más corta posible.
Especificaciones
La notación científica eficiente se define de la siguiente manera:
bx10^e
b
es el número de entrada apropiadamente dividida por potencias de 10 de tal manera que 1 <= b < 10
. Este número debe tener todos los ceros finales (y el punto decimal si es necesario) eliminado, pero debe tener la precisión del número original (hasta el límite del punto decimal en su idioma, por supuesto). Es decir, 90000
se vuelve 9
, 13.500
vuelve 1.35
, 0.000675
vuelve 6.75
, etc Si este número hasta extremos que contiene más lugares decimales de la lengua puede manejar, que deben redondearse a ese número máximo de cifras decimales.
e
es el exponente al que se eleva diez de tal manera n = b x 10^e
(recuerde que este número debe ser negativo si n
es menor que 1). Este número no debe tener ceros a la izquierda o un lugar decimal (principalmente porque si no es un entero, algo está mal ...).
Los caracteres x10^
deben permanecer como están en la cadena entre b
y e
.
Casos de prueba
Input -> output
1 -> 1
20 -> 20
3000000 -> 3x10^6
400000 -> 400000
0.008093 -> 0.008093
0.007835000000000 -> 0.007835
0.000003000000 -> 3x10^-6
0.00000065 -> 6.5x10^-7
0 -> 0
Puntuación
Este es el código de golf , por lo que gana el código más corto en bytes.
Otras reglas y aclaraciones
- Los ceros finales (y / o el lugar decimal final) no se cuentan para el recuento de caracteres del número de entrada original
n
. Tenga esto en cuenta para casos como el caso de prueba 6 - Puede suponer que si el número de entrada es menor que 1, siempre comenzará con un 0 en lugar de los dígitos (como en los casos de prueba 5-8).
- El número de entrada nunca será negativo
- Las incorporaciones que hacen que este desafío sea trivial y las lagunas estándar no están permitidas
- Una nueva línea final en la salida está bien
EDITAR
Gracias a user81655 por señalar que los casos de prueba 7 y 8 tenían potencias incorrectas de diez. Ahora los he arreglado, así que asegúrese de que su código los evalúe correctamente.
e
: 9000 -> 9e3
(¡casi más de 9,000 !)
x10^
. Y sería un poco de revisión de la cuestión, lo cual no creo que sea apropiado ahora que se publicó
pi^e^i^j^k^std::vector
?