我正在使用使用余数运算符表示数字是另一个的倍数。如果第一个数字是 3,第二个数字是 15,那么
if (3 % 15 == 0) {
}
然后它工作(不进入如果)。但是现在如果第一个数字是 3 而第二个数字是 4000 那么它不起作用条件仍然是真的
if (3 % 4000 == 0) {
}
在这里它不应该进入 if case。但这里的条件是真实的。为什么会这样?
我正在使用使用余数运算符表示数字是另一个的倍数。如果第一个数字是 3,第二个数字是 15,那么
if (3 % 15 == 0) {
}
然后它工作(不进入如果)。但是现在如果第一个数字是 3 而第二个数字是 4000 那么它不起作用条件仍然是真的
if (3 % 4000 == 0) {
}
在这里它不应该进入 if case。但这里的条件是真实的。为什么会这样?
如果你仔细测试你的程序,你会发现在这两种情况下if
语句的主体都没有被执行。
原因是你的论点%
是错误的。
if
应该是:
if (4000 % 3 == 0) {
%
运算符返回第一个参数除以第二个的余数。
它适用于每个值,余数始终为 3,因此 'if' 不会执行。如果你想用 0 检查,写“if”的更好方法是,
if (!(3 % 4000)){
// Code to execute
}
在这种情况下,它仅在余数为 0 时执行。并且还检查一次变量类型。
一种可能性是,如果您将其声明为带符号的 short int(0 到 127)并将 4000 存储到其中,则会发生溢出并且变量值将设置为最小值(即零(0))。所以,在你的情况下,它执行'if'。只是给你一个想法。
当 a%b == 0 时,如果 a>= b,则 a 是 b 的倍数
对于 a < b , a 永远不会是 b 的倍数,除非它为零
%模除法将返回 a/b 的余数(a 除以 b)
所以这里3%15
和 3%4000 等于 3
您不能将较小的数字除以较大的数字或将余数除以较大的数字。你有
if(3 % 4000==0){}
因此,在执行此类操作之前,您可以使用一个方法并向其传递 2 个数字,该方法将首先检查第一个数字是否大于或小于相应执行的数字。IE
//you may change the return type.
void multiple(int a, int b)
{
if(a>b)
{
if(a % b == 0)
{
//TO DO Code here
}
}
else
{
if(b%a==0)
{
//TO DO Code here
}
}
}