首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#中计算整数的除法和模数?

如何在C#中计算整数的除法和模数?
EN

Stack Overflow用户
提问于 2011-03-22 04:10:51
回答 3查看 320.5K关注 0票数 93

如何在C#中计算整数的除法和模数?

EN

回答 3

Stack Overflow用户

发布于 2013-06-28 00:40:17

还有Math.DivRem

代码语言:javascript
复制
quotient = Math.DivRem(dividend, divisor, out remainder);
票数 94
EN

Stack Overflow用户

发布于 2013-01-03 14:11:26

有趣的事实!

“模数”运算定义为:

代码语言:javascript
复制
a % n ==> a - (a/n) * n

参考:Modular Arithmetic

因此,您可以使用自己的运算符,尽管它会比内置的%运算符慢得多:

代码语言:javascript
复制
public static int Mod(int a, int n)
{
    return a - (int)((double)a / n) * n;
}

编辑:哇,最初在这里说错了话,谢谢@joren抓住我

现在我在这里依赖于这样一个事实,C#中的除法+ cast- to -int等同于Math.Floor (即,它去掉了小数),但一个“真正”的实现应该是这样的:

代码语言:javascript
复制
public static int Mod(int a, int n)
{
    return a - (int)Math.Floor((double)a / n) * n;
}

实际上,您可以使用以下内容来查看%和“真模数”之间的差异:

代码语言:javascript
复制
var modTest =
    from a in Enumerable.Range(-3, 6)
    from b in Enumerable.Range(-3, 6)
    where b != 0
    let op = (a % b)
    let mod = Mod(a,b)
    let areSame = op == mod
    select new 
    { 
        A = a,
        B = b,
        Operator = op, 
        Mod = mod, 
        Same = areSame
    };
Console.WriteLine("A      B     A%B   Mod(A,B)   Equal?");
Console.WriteLine("-----------------------------------");
foreach (var result in modTest)
{
    Console.WriteLine(
        "{0,-3} | {1,-3} | {2,-5} | {3,-10} | {4,-6}", 
        result.A,
        result.B,
        result.Operator, 
        result.Mod, 
        result.Same);
}

结果:

代码语言:javascript
复制
A      B     A%B   Mod(A,B)   Equal?
-----------------------------------
-3  | -3  | 0     | 0          | True  
-3  | -2  | -1    | -1         | True  
-3  | -1  | 0     | 0          | True  
-3  | 1   | 0     | 0          | True  
-3  | 2   | -1    | 1          | False 
-2  | -3  | -2    | -2         | True  
-2  | -2  | 0     | 0          | True  
-2  | -1  | 0     | 0          | True  
-2  | 1   | 0     | 0          | True  
-2  | 2   | 0     | 0          | True  
-1  | -3  | -1    | -1         | True  
-1  | -2  | -1    | -1         | True  
-1  | -1  | 0     | 0          | True  
-1  | 1   | 0     | 0          | True  
-1  | 2   | -1    | 1          | False 
0   | -3  | 0     | 0          | True  
0   | -2  | 0     | 0          | True  
0   | -1  | 0     | 0          | True  
0   | 1   | 0     | 0          | True  
0   | 2   | 0     | 0          | True  
1   | -3  | 1     | -2         | False 
1   | -2  | 1     | -1         | False 
1   | -1  | 0     | 0          | True  
1   | 1   | 0     | 0          | True  
1   | 2   | 1     | 1          | True  
2   | -3  | 2     | -1         | False 
2   | -2  | 0     | 0          | True  
2   | -1  | 0     | 0          | True  
2   | 1   | 0     | 0          | True  
2   | 2   | 0     | 0          | True  
票数 16
EN

Stack Overflow用户

发布于 2016-05-07 00:11:17

从用户读取两个整数。然后计算/显示余数和商,

代码语言:javascript
复制
// When the larger integer is divided by the smaller integer
Console.WriteLine("Enter integer 1 please :");
double a5 = double.Parse(Console.ReadLine());
Console.WriteLine("Enter integer 2 please :");
double b5 = double.Parse(Console.ReadLine());

double div = a5 / b5;
Console.WriteLine(div);

double mod = a5 % b5;
Console.WriteLine(mod);

Console.ReadLine();
票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5383050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档