Sparky la réponse est d'une manière standard pour résoudre ce problème, mais comme je l'ai écrit dans mon commentaire, vous courez le risque de débordements. Cela peut être résolu en utilisant un large type, mais si vous voulez diviser long long
s?
Nathan Ernst réponse fournit une solution, mais elle implique un appel de fonction, une déclaration de variable et d'un conditionnel, ce qui ne la rend pas plus courte que la OPs code et probablement même plus lentement, car il est plus difficile à optimiser.
Ma solution est:
q = (x % y) ? x / y + 1 : x / y);
Il sera légèrement plus rapide que l'OPs code, parce que le modulo et la division est effectuée à l'aide de la même instruction sur le processeur, car le compilateur ne peut voir qu'ils sont équivalents. Au moins gcc 4.4.1 effectue cette optimisation -O2 drapeau sur x86.
En théorie, le compilateur peut inline l'appel de la fonction dans Nathan Ernst code et d'émettre la même chose, mais gcc n'a pas fait ça quand je l'ai testé. Ce pourrait être parce qu'il est possible d'attacher le code compilé à une version unique de la bibliothèque standard.
Comme note finale, aucune de ces questions sur une machine moderne, sauf si vous êtes dans une situation extrêmement boucle serrée, et toutes vos données dans les registres ou dans la L1-cache. Sinon, toutes ces solutions seront tout aussi rapides, à l'exception, peut-être Nathan Ernst, qui pourrait être beaucoup plus lent si la fonction doit être récupérée à partir de la mémoire principale.