-5

我正在使用使用余数运算符表示数字是另一个的倍数。如果第一个数字是 3,第二个数字是 15,那么

if (3 % 15 == 0) {

}

然后它工作(不进入如果)。但是现在如果第一个数字是 3 而第二个数字是 4000 那么它不起作用条件仍然是真的

if (3 % 4000 == 0) {

}

在这里它不应该进入 if case。但这里的条件是真实的。为什么会这样?

4

5 回答 5

5

如果你仔细测试你的程序,你会发现在这两种情况下if语句的主体都没有被执行。

原因是你的论点%是错误的。

if应该是:

if (4000 % 3 == 0) {

%运算符返回第一个参数除以第二数。

于 2013-07-19T05:46:07.750 回答
0

它适用于每个值,余数始终为 3,因此 'if' 不会执行。如果你想用 0 检查,写“if”的更好方法是,

if (!(3 % 4000)){
    // Code to execute
}

在这种情况下,它仅在余数为 0 时执行。并且还检查一次变量类型。

一种可能性是,如果您将其声明为带符号的 short int(0 到 127)并将 4000 存储到其中,则会发生溢出并且变量值将设置为最小值(即零(0))。所以,在你的情况下,它执行'if'。只是给你一个想法。

于 2013-07-19T06:00:48.307 回答
0

当 a%b == 0 时,如果 a>= b,则 a 是 b 的倍数

对于 a < b , a 永远不会是 b 的倍数,除非它为零

于 2013-07-19T06:02:05.300 回答
0

%模除法将返回 a/b 的余数(a 除以 b)

所以这里3%15 和 3%4000 等于 3

于 2013-07-19T05:54:40.193 回答
0

您不能将较小的数字除以较大的数字或将余数除以较大的数字。你有

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    
        }
     }
    }
于 2013-07-19T05:55:13.640 回答