Как я нахожу следующее несколькими 10 из какого-либо целого числа?

Динамическое целое число будет любым числом от 0 до 150.

т.е. - число возвращается 41, потребность возвратиться 50. Если число является 10 потребностями возвратиться 10. Число является 1 потребностью возвратиться 10.

Думал, что я мог использовать функцию потолка, если я изменяю целое число как десятичное число...? затем используйте функцию потолка и возвратитесь к десятичному числу?
Только вещь, должен был бы также знать, равняется ли число 1, 2 или 3 цифры (т.е. - 7 по сравнению с 94 по сравнению с 136)

Существует ли лучший способ достигнуть этого?

Спасибо,

42
задан foraidt 8 March 2010 в 18:41
поделиться

10 ответов

n + (10 - n % 10)

Как это работает. Оператор % оценивает остаток от деления (так 41 % 10 оценивает 1, а 45 % 10 оценивает 5). Вычитание этого числа из 10 дает оценку того, сколько нужно для достижения следующего кратного числа.

Единственная проблема в том, что это превратит 40 в 50. Если вы не хотите этого, вам нужно добавить проверку, чтобы убедиться, что это число еще не кратно 10.

if (n % 10)
    n = n + (10 - n % 10);
84
ответ дан 26 November 2019 в 23:15
поделиться

Имейте в виду, что ответы, основанные на операторах 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;
}
3
ответ дан 26 November 2019 в 23:15
поделиться

Вы можете вычислить число по модулю 10. Затем вычтите этот результат. это с десяти. Затем добавьте этот результат к оригиналу.

if N%10 != 0  #added to account for multiples of ten 
  a=N%10
  N+=10-a
2
ответ дан 26 November 2019 в 23:15
поделиться

Как насчет использования целочисленной математики:

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
7
ответ дан 26 November 2019 в 23:15
поделиться

в C , однострочник :

int inline roundup10(int n) {
  return ((n - 1) / 10 + 1) * 10;
}
3
ответ дан 26 November 2019 в 23:15
поделиться

В псевдокоде:

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)
0
ответ дан 26 November 2019 в 23:15
поделиться

Это можно сделать, выполнив целочисленное деление на 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 Я не знаю, нужно ли вам это расширять до отрицательных чисел. Если вы это сделаете, следует позаботиться о том, чтобы сделать это правильно, в зависимости от того, что вам нужно в результате.

40
ответ дан 26 November 2019 в 23:15
поделиться

Что насчет ((n + 9) / 10) * 10 ?

Выдает 0 => 0, 1 => 10, 8 => 10, 29 => 30, 30 => 30, 31 => 40

24
ответ дан 26 November 2019 в 23:15
поделиться
n + (((9 - (n % 10)) + 1) % 10)
1
ответ дан 26 November 2019 в 23:15
поделиться
round_up(int i) 
{
      while(i%10) {
            i++;
      }
      return(i);
}
0
ответ дан 26 November 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: