测试一个数字是否均匀地进入 6?

Testing if a number goes evenly into 6?

我正在尝试查看包括负数在内的两个输入数字(整数)是否均匀地进入 6(余数为 0)。这是我正在尝试的代码。

if((in1)%6 == 0 && (in2)%6 == 0){
    printf("Divisible: both\n");
}
else if((in1)%6 == 0 && (in2)%6 > 0){
    printf("Divisible: only %i\n",in1);
}
else if((in1)%6 > 0 && (in2)%6 == 0){
    printf("Divisible: only %i\n",in2);
}
else{
    printf("Divisible: neither\n");}

这适用于所有正整数,但对于任何负数,打印的代码总是 "Divisible: neither" 任何关于如何显示可被 6 整除且余数为 0 的正数和负数的帮助都会非常有帮助

您可以使用 != 0 而不是 > 0。在 C 中,负数的 % 将给出负结果(或零)。

这是因为自 C99 以来 a / b 被定义为向零截断(在 C90 中它是实现定义的)。 a % b 定义为 a - (a / b) * b.

请注意,您实际上根本不需要此测试;如果满足 if 情况,您可以依赖 if...else 不进入 else 情况的行为,例如:

if ( in1 % 6 == 0 && in2 % 6 == 0 )
{
    // ...
}
else if ( in1 % 6 == 0 )   
{
    // would not reach here if in2 % 6 == 0
}
else if ( in2 % 6 == 0 )
{
    // would not reach here if in1 % 6 == 0
}
else

另一个考虑,而不是强制代码测试数字 3 次,重写以仅对数字执行 2 次测试。

if (in1 % 6) {
  if (in2 % 6) {
    printf("Divisible: both\n");
  } else {
    printf("Divisible: only %i\n",in1);
  }
} else {
  if (in2 % 6) {
    printf("Divisible: only %i\n",in2);
  } else {
    printf("Divisible: neither\n");}
  }
}