C#中如何同时获取整数除法的商和模?
C# 中同时获取整数商和模的实现方法
C# 确实没有像部分语言那样直接提供返回元组的divmod函数,但有两种高效的方式可以实现一次运算同时拿到商和余数,避免重复执行除法操作:
1. 使用内置的 Math.DivRem 方法
这是最推荐的方式,.NET 框架本身就提供了System.Math.DivRem静态方法,它通过输出参数返回余数,商则作为方法的返回值。底层会利用处理器的单次除法指令同时计算两个结果,完全没有重复计算的问题:
int dividend = 7; int divisor = 3; int remainder; int quotient = Math.DivRem(dividend, divisor, out remainder); // 此时 quotient = 2,remainder = 1
如果使用C# 7.0及以上版本,还可以用更简洁的语法:
var quotient = Math.DivRem(7, 3, out var remainder);
2. 自定义封装元组返回的方法
如果你偏好元组返回的形式,可以自己封装一个方法,编译器会自动优化,同样不会重复执行除法。另外可以加入逻辑让余数符号和除数一致(修正C#默认向零取整的行为,和传统divmod对齐):
public static (int Quotient, int Remainder) DivMod(int dividend, int divisor) { if (divisor == 0) throw new DivideByZeroException(); int quotient = dividend / divisor; int remainder = dividend % divisor; // 调整负数场景下的结果,确保余数与除数同号 if ((dividend < 0) != (divisor < 0) && remainder != 0) { quotient++; remainder -= divisor; } return (quotient, remainder); }
调用时直接解构元组即可:
var (q, r) = DivMod(-7, 3); // q = -3,r = 2
内容的提问来源于stack exchange,提问作者Jez
相关产品推荐
相关产品推荐

