Олимпиадный тренинг

Задача . A. Отображение количества лайков


Поликарп работает над внедрением отображения лайков в социальной сети Codehorses. Количество лайков следует отображать в виде, который легко бы читался пользователями. Решено, что для больших значений будет использована запись вида 123K (сто двадцать три тысячи) или даже 56M (пятьдесят шесть миллионов).

Утверждена следующая стратегия отображения:

  • количество будет отображено либо в виде целого числа от 0 до 999, либо в виде целого положительного количества тысяч (от 1K до 999K), либо в виде целого положительного количества миллионов (от 1M и далее);
  • заданное точное количество лайков \(n\) при отображении должно быть округлено к ближайшей записи из пункта выше (при неоднозначности округления надо округлять вверх) — например, \(1785\) должно быть округлено к 2K, но не к 1K; \(4500000\) должно быть округлено к 5M.

Помогите Поликарпу реализовать эту часть функциональности: по заданному целому неотрицательному числу лайков \(n\) выведите его запись в интерфейсе Codehorses.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных, по одному в строке.

Описание набора состоит из строки, которая содержит целое неотрицательное число \(n\) (\(0 \le n \le 2\cdot10^9\)) — количество лайков.

Выходные данные

Выведите \(t\) ответов на заданные наборы входных данных в порядке из записи в тесте. Каждое выведенное значение должно иметь один из следующих видов:

  • либо целое число от 0 до 999 — соответствует просто записанному количеству,
  • либо запись количества тысяч от 1K до 999K,
  • либо запись количества миллионов от 1M до 2000M.

Ответ равен такой записи, которая является ближайшей (с точки зрения модуля разности) к заданному числу \(n\). Если такую форму округления можно совершить неоднозначно, то округлите вверх (к большему значению).

Примечание

Рассмотрим некоторые наборы входных данных:

  • \(1782\) может быть представлено либо как 1K, либо как 2K, но 2K — ближайшая запись;
  • \(1500\) одинаково удалено и от 1K, и от 2K, поэтому надо округлять вверх;
  • \(999999\) должно быть записано как 1M, так как такая запись ближе, чем 999K.

Примеры
Входные данныеВыходные данные
1 9
999
123
0
1782
31415926
1500
999999
35499710
2000000000
999
123
0
2K
31M
2K
1M
35M
2000M

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя