La risposta di Sparky è un modo standard per risolvere questo problema, ma come ho scritto anche nel mio commento, corri il rischio di overflow. Questo può essere risolto utilizzando un tipo più ampio, ma cosa succede se si desidera dividere long long
s?
La risposta di Nathan Ernst fornisce una soluzione, ma comporta una chiamata di funzione, una dichiarazione di variabile e un condizionale, che non lo rende più breve del codice OP e probabilmente anche più lento, perché è più difficile da ottimizzare.
La mia soluzione è questa:
q = (x % y) ? x / y + 1 : x / y;
Sarà leggermente più veloce del codice OP, perché il modulo e la divisione vengono eseguiti usando le stesse istruzioni sul processore, perché il compilatore può vedere che sono equivalenti. Almeno gcc 4.4.1 esegue questa ottimizzazione con -O2 flag su x86.
In teoria il compilatore potrebbe includere la funzione chiamata nel codice di Nathan Ernst ed emettere la stessa cosa, ma gcc non l'ha fatto quando l'ho provato. Ciò potrebbe essere dovuto al fatto che legherebbe il codice compilato a una singola versione della libreria standard.
Come nota finale, nulla di tutto ciò conta su una macchina moderna, tranne se si è in un ciclo estremamente stretto e tutti i dati sono nei registri o nella cache L1. Altrimenti tutte queste soluzioni saranno ugualmente veloci, ad eccezione di quelle di Nathan Ernst, che potrebbero essere significativamente più lente se la funzione debba essere recuperata dalla memoria principale.
q = x/y + (x % y != 0);
è sufficiente