我可以编写这个程序
int a = 3;
int b = 4;
Console.WriteLine(a % b);
我得到的答案是3。为什么3 mod 4等于3?
我无法理解这样计算的方式。
我不太确定会发生什么事情, 但是我无法解释剩下的部分为什么是3。
假设你有3个饼干,想要平均分给4个人吃。
因为人数比饼干数量多,所以没有人分到饼干(商 = 0),而你自己则剩下了3个饼干(余数 = 3)。 :)
因为 3 / 4 的余数为 3。
3 mod 4是将3除以4的余数。
在这种情况下,4不能整除3,因此商为0,余数为3。
1 / 3 = .333333333......
但是模运算并不是这样工作的。它会忽略从除法中返回的小数商值或比率,在 1/3
的商式中提取“0余1”的商式,并提取出从该除法返回的 1 或余数。它只是从商中剥离余数,然后将在其转换为十进制之前的除法余数返回。下面是模运算的工作原理...
1 % 3 = 1
因此,更好的描述 Modulus 的方式是说它是在将第二个数(除数)尽可能多次地除入第一个数(被除数)后所剩下的整数(余数)。
1 % 1 = 0 because after dividing 1 into 1, one time, there's nothing left
2 % 1 = 0 because after dividing 1 into 2, two times, there's nothing left
1 % 2 = 1 because 2 won't go into 1, so 1 is left
模数运算(又称模运算)返回的这些“整数余数”在软件程序中非常有用,可以用于计算星期几、创建交替序列、判断一个数字是偶数还是奇数等。
我认为用户已经理解了答案。因为有很多优秀的程序员..简单来说,%
指在用您自己的整数除法后的余数。
例如:
int a = int.Parse(Console.ReadLine());
int b = a % 2;
正如其他人所解释的那样,如果您不想使用“mod”运算符。这里是计算“a”除以“n”的余数的方程:
a-(n* int(a/n))
也许C#的实现是不言自明的 -
static void Main(string[] args)
{
int a = 3;
int b = 4;
Console.WriteLine(a % b);
Console.WriteLine(MOD(a,b));
Console.ReadKey();
}
public static int MOD(int a, int b)
{
int i, j, k;
i = a / b;
j = i * b;
k = a - j;
return k;
}
虽然这可能是“众所周知的”,但如果您想了解更多计算模数的方法(或使用替代方法),可以阅读此文章,其中对几种不同的方法进行了基准测试。
基本上,最快的方法就是传统的模数运算符,类似于:
if (x % threshold == some_value)
{
//do whatever you need to
}
D = dq + r
中的r
,但是模数向负无穷方向舍入d
,而余数向零方向舍入d
。 - isekaijin