【问题标题】:The opposite of the modulo operator?与模运算符相反?
【发布时间】:2020-04-05 01:51:33
【问题描述】:

我记得在 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.-”。我知道这一点,但一定有更巧妙的方法吗?

【问题讨论】:

  • Console.WriteLine(1000 / 90) :)
  • 如果您将问题标记为整数除法,那么您怎么会不知道呢?
  • 只除整数而不是浮点数。 1000.0 / 90.0 = 11.111; 1000 / 90 = 11。1000 % 90 = 10。
  • @GregS,很容易犯错!我实际上正在使用小数。我找不到十进制除法标记。所以我选择了下一个最接近的东西,=D

标签: c# integer-division


【解决方案1】:

您要查找的内容称为整数除法。它与模运算符完全无关。

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

例子:

int one = 81 / 80;

这会给你1,而double notOne = 81.0 / 80会给你1.0125

【讨论】:

  • TY - 我已经做 C# 几年了,所以直到现在才真正出现这种微不足道的事情。在 java 中,我被教导了这一点,所有这些都使用模运算符。在 C# 中,我不记得见过这样的东西。因此问题。
【解决方案2】:

你已经得到了答案,如果你把它分配给一个整数,就不需要处理小数了。

在您的评论中您说您正在使用小数,那么Math.Floor 是一种可能性。即:

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

【讨论】:

  • 感谢... (95.45 / 50)
  • 95.45/50=1.909,Math.Floor 会将其四舍五入为 1.000。 195.45/ 50=3.909,Math.Floor 将返回 3.000。等
  • Math.Floor 的反面是 Math.Ceiling,它会向上取整到最接近的数字。
【解决方案3】:

在 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.

我一直认为QUOTIENT是MOD的对立面  —  或许这就是OP所说的MOD的“对立面”。

【讨论】:

  • 这正是我想要记住的。使用说 int x = 22/12 返回 1,因为 c 中的截断使 int 成为最大的完整数并丢弃浮点数。如果您需要余数和总组数,您可以将其与 mod 结合使用
【解决方案4】:
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 人冒出了表面并拒绝再被包含 - 哈哈
【解决方案5】:

幸运的是,您提出的问题与模数的倒数不同。理论上,模的倒数可以给你一个未知的分子或除数。

例如,假设您有n % d = r。你知道 r 和 d,而 n 是未知的。模函数表示为n % d = n - d*INT(n/d)。所以r = n - d*INT(n/d)。我想不出如何直接解决这个问题,因为当你不知道 n 时,你需要知道 INT(n/d)。

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多