Desafío
Dado un número x
y un número n
, redondea el número x
a n
cifras significativas y genera el resultado.
Personajes importantes
Las cifras significativas de un número son dígitos que tienen un significado que contribuye a su resolución de medición. Esto incluye todos los números excepto los ceros a la izquierda.
Tenga en cuenta que los ceros a la izquierda después de un punto decimal siguen siendo cifras insignificantes .
Al redondear un dígito, debe redondear desde cero si el siguiente dígito es mayor o igual que cinco.
Todos los ceros finales después de un punto decimal se cuentan como significativos.
Entrada
El primer número será x
, el número que se redondeará. El segundo número será n
, el número de cifras significativas que debe redondear x
.
x
será un número (su código debe manejar enteros y puntos flotantes) entre -1,000,000,000 y 1,000, 000,000 inclusive. n
será un número entero positivo entre 1 y 50 inclusive. n
nunca será mayor que el número de dígitos en x
.
La entrada nunca será 0
o cualquier forma de 0
, por ejemplo, 0.000
o 000
.
Ejemplos
Inputs: 2.6754, 2
Output: 2.7
Una salida de 2.7000
sería inválida porque los ceros al final del punto decimal se cuentan como cifras significativas.
Inputs: 0.00034551, 4
Output: 0.0003455
Inputs: 50237.1238, 3
Output: 50200
Tenga en cuenta que esto no debe tener un punto decimal.
Inputs: 2374905, 1
Output: 2000000
Inputs: 543.0489, 4
Output: 543.0
Inputs: 15, 1
Output: 20
Inputs: 520.3, 3
Output: 520
Si lo desea, puede imprimir en su 520.
lugar pero no 520.0
.
Inputs: -53.87, 2
Output: -54
Inputs: 0.0999, 2
Output: 0.10
Reglas
Las funciones y bibliotecas integradas que le permiten redondear un número a n
cifras significativas no están permitidas.
Victorioso
El código más corto en bytes gana.
Inputs: 520.3, 3
, ¿no es520.
crucial el punto decimal en la respuesta ?2.0 x 10^2
, mostrando las 2 sigfigs.Respuestas:
Python 3, 83 bytes
(similar a la respuesta PHP)
Casos de prueba:
Salida:
Además de ser un poco más largo, otro enfoque que consideré:
... produce una salida incorrecta para la entrada de (15, 1):
... debido a la imprecisión de coma flotante en la
round()
función. Me parece probable que también pueda encontrar casos de prueba que rompan el método de "redondear a cero decimales" si busco lo suficiente.Por lo tanto, me parece que mi solución probablemente no sea 100% correcta para todos los casos y no lo sería a menos que se calculara en decimal. Por lo tanto, este problema puede afectar las soluciones en cualquier lenguaje que use aritmética FP.
fuente
s
en la misma línea, luego use punto y coma.def s(x,n):y=10**(ceil(log10(abs(x)))-n);return y*round(x/y)
import *
para hacerloimport*
round()
función se redondea an
decimales, no an
cifras significativas, por lo que se permitió este evento de golf.PHP, 130 bytes
PHP, 133 Bytes funciona con valores <1 para las cifras significativas
PHP, 56 Bytes funciona pero omite los ceros innecesarios
¡Alguien ha robado o eliminado la función redonda en PHP! Para hacer el desafío más interesante. 127 bytes
fuente
Lote,
660652 bytesExplicación: comienza con el sufijo
.
a en el parámetro en caso de que aún no tenga uno, luego recorta el signo (que se guarda) y los ceros a la izquierda. La variable resultantem
se guarda para más adelante porque nos dirá la magnitud deseada del resultado. Cualquier.
s se retiraron entonces, lo que podría dar lugar a nuevas ceros a la izquierda, por lo que se eliminan también.n
los ceros tienen el sufijo para garantizar que haya suficientes dígitos para redondear, luego se extraen los dígitosn
th y firstn
. Si eln
dígito th no es 4 o menos, entonces agregamos tediosamente1
a la cadena. Si la cadena se desborda, entonces aumentamos la magnitud con el prefijo a1
, pero si originalmente era menor que0.1
eso, eliminamos el1
eliminamos que acabamos de agregar y también un0
después del punto decimal. Si la magnitud es aún menor que1
entonces, copiamos los ceros después del punto decimal al resultado, sin embargo, si es1
o más, extraemos la parte entera de la respuesta, agregando ceros adicionales si es necesario para llegar al punto decimal (que es entonces eliminado ya que mostraría una precisión incorrecta). Finalmente, el signo, la parte entera, el punto decimal y la parte decimal se concatenan.fuente