2012-08-09 10 views
6

Durante la programación a menudo me encuentro que necesitan para calcular algo como:¿Existe alguna forma más elegante de calcular x = (y/n) + (y% n? 1: 0)?

x = (y/n) + (y % n ? 1 : 0);

O más explícitamente:

x = y/n; 
if (y % n != 0) { 
    x = x + 1; 
} 

¿Existe una forma más elegante para alcanzar este valor? ¿Se puede lograr sin usar una expresión condicional?

+0

¿Alguna vez ha resultado negativo? En su modelo, ¿la división de enteros gira hacia cero o hacia el infinito negativo? – Kevin

+0

@Kevin: yn son siempre positivos. Técnicamente creo que trunca, que sería hacia cero. – grieve

Respuesta

14

Por lo tanto, desea que la división entera redondee en lugar de hacia abajo. Usted puede fingir esto añadiendo n-1 al numerador:

x = (y + n - 1)/n; 

De esa manera usted cambia el valor que va a ser redondeado hacia abajo a lo suficiente para darle el resultado deseado.

+2

Solo tenga en cuenta posibles problemas de sobreflujo/envoltura si 'n' o' y' es grande. –

Cuestiones relacionadas