Динамическое целое число будет любым числом от 0 до 150.
т.е. - число возвращается 41, потребность возвратиться 50. Если число является 10 потребностями возвратиться 10. Число является 1 потребностью возвратиться 10.
Думал, что я мог использовать функцию потолка, если я изменяю целое число как десятичное число...? затем используйте функцию потолка и возвратитесь к десятичному числу?
Только вещь, должен был бы также знать, равняется ли число 1, 2 или 3 цифры (т.е. - 7 по сравнению с 94 по сравнению с 136)
Существует ли лучший способ достигнуть этого?
Спасибо,
n + (10 - n % 10)
Как это работает. Оператор % оценивает остаток от деления (так 41 % 10
оценивает 1, а 45 % 10
оценивает 5). Вычитание этого числа из 10 дает оценку того, сколько нужно для достижения следующего кратного числа.
Единственная проблема в том, что это превратит 40 в 50. Если вы не хотите этого, вам нужно добавить проверку, чтобы убедиться, что это число еще не кратно 10.
if (n % 10)
n = n + (10 - n % 10);
Имейте в виду, что ответы, основанные на операторах div и mod («/» и «%»), не будут работать для отрицательных чисел без if-теста, потому что C и C ++ неправильно реализуют эти операторы для отрицательных чисел. (-3 mod 5) равно 2, но C и C ++ вычисляют (-3% 5) как -3.
Вы можете определять свои собственные функции div и mod. Например,
int mod(int x, int y) {
// Assert y > 0
int ret = x % y;
if(ret < 0) {
ret += y;
}
return ret;
}
Вы можете вычислить число по модулю 10. Затем вычтите этот результат. это с десяти. Затем добавьте этот результат к оригиналу.
if N%10 != 0 #added to account for multiples of ten
a=N%10
N+=10-a
Как насчет использования целочисленной математики:
N=41
N+=9 // Add 9 first to ensure rounding.
N/=10 // Drops the ones place
N*=10 // Puts the ones place back with a zero
в C , однострочник :
int inline roundup10(int n) {
return ((n - 1) / 10 + 1) * 10;
}
В псевдокоде:
number = number / 10
number = ceil(number)
number = number * 10
В Python:
import math
def my_func(x):
return math.ceil(x / 10) * 10
Это должно сработать. Имейте в виду, что в приведенном выше коде целое число будет приведено к float/double для арифметики, а для окончательного возврата оно может быть изменено обратно на целое число. Вот пример с явным приведением типов
В Python (с приведением типов):
import math
def my_func(x):
return int(math.ceil(float(x) / 10) * 10)
Это можно сделать, выполнив целочисленное деление на 10 с округлением в большую сторону , а затем умножение результата на 10.
Чтобы разделить A
на B
округление в большую сторону, добавьте B - 1
к A
, а затем разделите его на B
, используя «обычное» целочисленное деление
Q = (A + B - 1) / B
Итак, для вашей конкретной проблемы, время вместе будет выглядеть следующим образом
A = (A + 9) / 10 * 10
Это будет «защелкиваться» A
до следующего большего числа, кратного 10.
Необходимость деления и выравнивания возникает так часто, что обычно в моих программах у меня есть макросы для деления [беззнаковых] целых чисел с округлением вверх
#define UDIV_UP(a, b) (((a) + (b) - 1) / (b))
и для выравнивание целого числа по следующей границе
#define ALIGN_UP(a, b) (UDIV_UP(a, b) * (b))
, в результате чего приведенное выше будет выглядеть как
A = ALIGN_UP(A, 10);
PS Я не знаю, нужно ли вам это расширять до отрицательных чисел. Если вы это сделаете, следует позаботиться о том, чтобы сделать это правильно, в зависимости от того, что вам нужно в результате.
Что насчет ((n + 9) / 10) * 10
?
Выдает 0 => 0, 1 => 10, 8 => 10, 29 => 30, 30 => 30, 31 => 40