模除运算符的相反操作是什么?

18

我记得在Java中,取模运算符可以被反转,这样不仅能够知道操作的余数,还可以倒过来得出一个数被除以多少次:

Console.WriteLine(1000 % 90);
Console.WriteLine(100 % 90);
Console.WriteLine(81 % 80);
Console.WriteLine(1 % 1);

输出:

  • 10
  • 10
  • 1
  • 0

示例来自DotNetPerls

我想看到'80'除以'81'的次数而不是余数。这应该是1,剩余1。

C#取模运算符支持此行为吗?如果不支持,如何实现所需的行为?请尽量使用简单的代码解决... :D

编辑:

我想答案会像将两个数字相除并去掉'-.#'值并保留整数'1.-'一样简单。我知道这个方法,但应该有更好的方法吧?


7
Console.WriteLine(1000 / 90) :) 控制台.写入行(1000 / 90) :) - Marcin Robaszyński
8
如果您在问题中打了“整数除法”标签,那么您怎么可能不知道这个呢? - President James K. Polk
2
只需对整数进行除法运算,不要使用浮点数。1000.0 / 90.0 = 11.111; 1000 / 90 = 11。1000 % 90 = 10。 - Marcin Robaszyński
1
@GregS,这是一个容易犯的错误!实际上我正在使用小数。我找不到小数除法标签,所以我选择了最接近的东西,=D。 - IbrarMumtaz
6个回答

24

你要寻找的是称为整数除法的操作。它与模运算符无关。

要执行整数除法,只需确保两个运算数都不是浮点数/双精度数。

例如:

int one = 81 / 80;

这会给你1,而double notOne = 81.0 / 80将会给你1.0125,例如。


TY - 我已经做了几年的C#,所以像这样微不足道的事情直到现在才出现。在Java中,我学习了使用取模运算符的相关知识。但是在C#中,我不记得看到过类似的东西。因此有这个问题。 - IbrarMumtaz

10

你已经得到了答案,如果将其分配给整数,则无需处理小数。

在您的评论中,您提到正在处理小数,那么Math.Floor是一个可能的选择。例如:

double d = Math.Floor(81.0 / 80.0); // 1.0000....

谢谢这个……(95.45 / 50)<-- 我只需要知道50可以被95.45除几次。让我先检查一下Math.Floor - =) - IbrarMumtaz
1
95.45/50=1.909,Math.Floor 会将其舍为 1.000。195.45/50=3.909,Math.Floor 将返回 3.000。以此类推。 - Avada Kedavra
1
Math.Floor 的相反操作是 Math.Ceiling,它会将数值向上取整到最近的整数。 - Avada Kedavra
.NET的警告提示:System.Math.Floor(2,3)返回0(正确),而System.Math.Floor(-2,3)返回-1(不正确)。这个解决方案只适用于正数结果,并且因此不建议使用。 - Jochen

4
在 OpenOffice CALC 中,有一个名为 QUOTIENT 的函数,它返回除法的整数部分。
      MOD(17;4) returns 1, while
 QUOTIENT(17;4) returns 4.

      MOD(33;9) returns 6, while
 QUOTIENT(33;9) returns 3.

我一直认为商是模运算的对应物,也许这就是“相反”MOD的意思。


这正是我想要记住的内容。使用say,int x = 22/12返回1,因为在c中的截断使得int成为最大的整数并丢弃浮点数。如果你需要余数和总组数,你可以将其与mod结合使用。 - Steve Byrne

2
Console.WriteLine(1000 % 90); // modulo = 10
Console.WriteLine(1000 / 90); // integer division = 11
Console.WriteLine(1000 / 90.0); // floating point division = 11.1111111111111

我有点理解你的问题,尽管其他人都在指责你。为了平衡整数除法,您需要使用模运算符来处理余数:((1000 / 90) * 90) + (1000 % 90) == 1000


谢谢,我必须承认这是一个奇怪的问题,只是我内心深处的前Java程序员浮现出来,拒绝再被压抑 - 哈哈 - IbrarMumtaz

2
幸运的是,你提出的问题与模反元素无关。模反元素理论上能够给你一个未知的分子或除数。
例如,假设你有 n % d = r,你知道r和d,而n是未知的。模函数可以表示为 n % d = n - d*INT(n/d)。因此 r = n - d*INT(n/d)。我想不出如何直接解决这个问题,因为当你不知道n时,你需要知道INT(n/d)。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接