假设你M最初知道,你可以保留两个变量,一个是到目前为止的答案除以M,另一个是余数.
例如,在C++中:
int ans = 0, remainder = 0;
for (int i=0;i<N;i++) {
remainder += input[i]; // update remainder so far
ans += remainder/N; // move what we can from remainder into ans
remainder%=N; // calculate what's left of remainder
}
Run Code Online (Sandbox Code Playgroud)
在循环结束时,找到答案ans,其余部分在remainder(如果您需要除截断之外的舍入方法).
此示例适用于最大输入数M + N适合32位int的情况.
请注意,这应该适用于正整数和负整数,因为在C++中,/运算符是除法运算符,%实际上是余数运算符(实际上不是模运算符).