Ответ 1
Для ввода n
:
(n + 50) / 100 * 100
с использованием целочисленного деления.
Обратите внимание, что многие языки/библиотеки уже имеют функции для этого.
Первое число необходимо округлить до ближайшего второго номера. Есть много способов сделать это, но какой лучший и самый короткий алгоритм? Кто-нибудь за вызов:-)
1244- > 1200
1254- > 1300
123- > 100
178- > 200
1576- > 1600
1449- > 1400
123456- > 123500
654321- > 654300
23- > 00
83- > 100
Для ввода n
:
(n + 50) / 100 * 100
с использованием целочисленного деления.
Обратите внимание, что многие языки/библиотеки уже имеют функции для этого.
Метод Ruby round может использовать отрицательные оценки:
n.round(-2)
В этом случае -2 получает округление до ближайшей сотни.
100 * round(n/100.0)
Я знаю это в конце игры, но здесь я обычно устанавливаю, когда имею дело с необходимостью округлять вещи до ближайшего nTh:
Number.prototype.roundTo = function(nTo) {
nTo = nTo || 10;
return Math.round(this * (1 / nTo) ) * nTo;
}
console.log("roundto ", (925.50).roundTo(100));
Number.prototype.ceilTo = function(nTo) {
nTo = nTo || 10;
return Math.ceil(this * (1 / nTo) ) * nTo;
}
console.log("ceilTo ", (925.50).ceilTo(100));
Number.prototype.floorTo = function(nTo) {
nTo = nTo || 10;
return Math.floor(this * (1 / nTo) ) * nTo;
}
console.log("floorTo ", (925.50).floorTo(100));
Я нахожу себя использующим Number.ceilTo(..), потому что я работаю с Canvas и пытаюсь выяснить, насколько далеко от масштаба.
Это будет сделано, если вы используете целочисленную математику:
n = (n + 50) / 100 * 100
Конечно, вы не указали поведение, например, 1350 и 1450, поэтому я решил округлить. Если вам нужно округлить, это не сработает.
Это домашнее задание?
Как правило, mod 100, то if > 50 add else вычесть.