Вызов
Задав число x
и число n
, округлите число x
до n
значащих цифр и выведите результат.
Значимые фигуры
Значимые цифры числа являются цифрами, которые несут значение, способствующее его разрешающей способности измерения. Это включает в себя все числа, кроме ведущих нулей.
Имейте в виду, что ведущие нули после десятичной точки по-прежнему незначительны .
При округлении цифры вы должны округлить от нуля, если следующая цифра больше или равна пяти.
Все конечные нули после десятичной точки считаются значимыми.
вход
Первое число будет x
округленным числом. Второе число n
- количество значащих цифр, до которых вы должны округлить x
.
x
будет числом (ваш код должен обрабатывать как целые числа, так и числа с плавающей запятой) в диапазоне от -1 000 000 000 до 1 000 000 000 включительно. n
будет положительным целым числом от 1 до 50 включительно. n
никогда не будет больше, чем число цифр в x
.
Ввод никогда не будет 0
или какой-либо форме 0
, например, 0.000
или 000
.
Примеры
Inputs: 2.6754, 2
Output: 2.7
Вывод 2.7000
будет недействительным, потому что завершающие нули после десятичной точки считаются значащими цифрами.
Inputs: 0.00034551, 4
Output: 0.0003455
Inputs: 50237.1238, 3
Output: 50200
Обратите внимание, что это не должно иметь десятичную точку.
Inputs: 2374905, 1
Output: 2000000
Inputs: 543.0489, 4
Output: 543.0
Inputs: 15, 1
Output: 20
Inputs: 520.3, 3
Output: 520
Если вы хотите, вы можете вывести 520.
вместо этого, но нет 520.0
.
Inputs: -53.87, 2
Output: -54
Inputs: 0.0999, 2
Output: 0.10
правила
Встроенные функции и библиотеки, которые позволяют округлять число до n
значащих цифр, запрещены.
выигрыш
Самый короткий код в байтах побеждает.
Inputs: 520.3, 3
, не десятичная точка в ответе520.
важно?2.0 x 10^2
, показывая 2 сигфига.Ответы:
Python 3, 83 байта
(похоже на ответ PHP)
Тестовые случаи:
Выход:
Помимо того, что я немного длиннее, я рассмотрел еще один подход:
... выдает неправильный вывод для ввода (15, 1):
... из-за неточности с плавающей точкой в
round()
функции. Мне кажется, что я мог бы найти контрольные примеры, которые сломали бы метод «округление до нуля», даже если бы я посмотрел достаточно усердно.Таким образом, мне кажется, что мое решение, вероятно, не на 100% правильно для всех случаев и не будет, если оно не будет вычислено в десятичном виде. Следовательно, эта проблема может повлиять на решения на любом языке, использующем арифметику FP.
источник
s
той же строке, а затем используйте точки с запятой.def s(x,n):y=10**(ceil(log10(abs(x)))-n);return y*round(x/y)
import *
чтобы сделать этоimport*
round()
функция округляет доn
десятичных разрядов, а не доn
значащих цифр, поэтому это было разрешено для этого события гольфа.PHP, 130 байт
PHP, 133 байта работает со значениями <1 для значащих цифр
PHP, 56 байт работает, но пропускают ненужные нули
Кто-то украл или удалил функцию округления в PHP! Чтобы сделать задачу более интересной. 127 байт
источник
Пакетный,
660652 байтаОбъяснение: Начинается с суффикса a
.
к параметру, если его еще нет, затем обрезает знак (который сохраняется) и любые начальные нули. Полученная переменнаяm
сохраняется для последующего использования, поскольку она сообщит нам желаемую величину результата. Любые.
s затем удаляются, что может привести к дальнейшим начальным нулям, поэтому они тоже удаляются.n
к нулю добавляется суффикс, чтобы обеспечить достаточное количество цифр для округления, после чего извлекаютсяn
первая иn
третья цифры. Если числоn
th не равно 4 или меньше, мы утомительно добавляем1
в строку. Если строка переполняется, то мы увеличиваем величину, добавляя префикс a1
, но если она изначально была меньше, чем0.1
мы, удаляя1
только что добавленную нами, а также0
после десятичной точки. Если значение все еще меньше, чем1
мы копируем нули после десятичной точки в результат, однако, если оно равно1
или больше, мы извлекаем целую часть ответа, добавляя дополнительные нули, если необходимо достичь десятичной точки (которая затем удаляется, так как это будет показывать неправильную точность). Наконец, знак, целая часть, десятичная точка и десятичная часть объединяются.источник