Что делает этот калькулятор
Калькулятор сдачи определяет, сколько денег нужно вернуть покупателю при оплате наличными, и раскладывает эту сумму на минимально возможное количество банкнот и монет. Это универсальный инструмент: он не привязан к одной стране и позволяет выбрать одну из распространённых мировых валют — доллар США (USD, используется по умолчанию), евро (EUR), британский фунт (GBP), канадский доллар (CAD), австралийский доллар (AUD), мексиканское песо (MXN), филиппинское песо (PHP), новозеландский доллар (NZD) и бразильский реал (BRL). Российский рубль здесь напрямую не поддерживается, но логика расчёта одинакова для любой валюты с привычным номиналом.
Как пользоваться
Выберите валюту и режим работы. В режиме «Рассчитать сдачу» введите стоимость покупки и сумму, которую внёс покупатель — калькулятор вычислит сдачу как «внесено минус покупка». В режиме «Указать сумму сдачи» вы вводите сдачу напрямую, минуя расчёт по покупке. В результате отображается сумма сдачи, а также таблица: сколько купюр и монет каждого номинала нужно выдать (от крупных к мелким) и общее количество единиц.
Формула и алгоритм
Сначала вычисляется сдача:
$$\text{Сдача} = \text{Внесено} - \text{Покупка}$$
(либо берётся введённая сумма). Чтобы избежать ошибок округления при работе с дробными числами, сумма переводится в целые субъединицы (центы): её умножают на 100 и округляют. Затем «жадный» алгоритм перебирает номиналы от крупного к мелкому, беря по
$$n_d = \left\lfloor \frac{r}{d} \right\rfloor,\quad r \leftarrow r - n_d\,d$$
единиц каждого и вычитая их из остатка. Для классических («канонических») денежных систем — таких как USD, EUR и GBP — жадный алгоритм даёт действительно минимальное число единиц.
Разбор на примере
USD, покупка $7,50, внесено $20,00. Сдача = \(\$12{,}50 = 1250\) центов. Жадный алгоритм: одна купюра $10 (остаётся 250 ц), одна $2 (остаётся 50 ц), одна монета 50 ¢ (остаётся 0). Итог: \(1 \times \$10\), \(1 \times \$2\), \(1 \times 50\,¢\) — всего 3 единицы.
Частые вопросы
Зачем переводить сумму в центы? Работа в целых субъединицах исключает ошибки вроде 12,499999, из-за которых может появиться лишняя монета.
Что будет, если отключить какой-то номинал? Жадная раскладка всё равно выполнится по оставшимся номиналам; если выйти на ноль не удаётся, программа сообщит остаток. Чтобы гарантировать точную сдачу, оставляйте самую мелкую монету включённой.
Всегда ли жадный алгоритм оптимален? Для канонических национальных денежных систем — да. При нестандартных наборах номиналов или при отключённых номиналах он вернёт корректную, но не обязательно минимальную раскладку.