2012-08-09 8 views
6

Podczas programowania często znajduję się konieczności obliczyć coś takiego:Czy istnieje bardziej elegancki sposób obliczania x = (y/n) + (y% n? 1: 0)?

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

Lub bardziej wyraźny:

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

Czy istnieje bardziej elegancki sposób, aby osiągnąć tę wartość? Czy można to osiągnąć bez użycia wyrażenia warunkowego?

+0

Czy kiedykolwiek jesteś negatywny? Czy w twoim modelu liczba całkowita jest zaokrąglana do zera lub do ujemnej nieskończoności? – Kevin

+0

@Kevin: yin są zawsze dodatnie. Technicznie myślę, że to przycina, co byłoby na zero. – grieve

Odpowiedz

14

A więc chcesz, aby podział całkowity zaokrąglał w górę zamiast w dół. Można to fałszywy dodając n-1 na liczniku:

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

ten sposób można zmieniać wartość zostanie ona zaokrąglona w dół do wystarczy do uzyskania pożądanego rezultatu.

+2

Należy pamiętać o możliwych problemach z przepełnieniem/zawijaniem, jeśli 'n' lub' y' jest duży. –

Powiązane problemy