I went looking for this but couldn’t seem to find it. Bad search terms, maybe? Anyway, have at it:
#include <math.h> /* 'div()' rounds toward zero */ int average(int n, const int * a) { int val = 0; int rem = 0; for (int i = 0; i < n; ++i) { div_t d = div(a[i], n); val += d.quot; rem += d.rem; } return val + div(rem, n).quot; }
Works for positive and negative values. There’s a minimal chance of overflow here (rem is at most (n-1)*n). Can anybody do any better?