You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:25:28