测试一个数字是否均匀分配到6?

时间:2017-02-27 02:57:51

标签: c modulo

我试图看看包含负数的两个输入数字(整数)是否均匀地进入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");}

这适用于所有正整数,但对于任何底片,打印的代码总是"可分割:既不是"任何帮助,我如何能够显示正整数和负数可被6整除,余数为0将非常有帮助

2 个答案:

答案 0 :(得分:5)

您可以使用!= 0代替> 0。在C中,负数的%将给出否定结果(或零)。

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

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

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

答案 1 :(得分:0)

另一个考虑因素,而不是强制代码测试数字3次,重写只对numnbers执行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");}
  }
}