问题描述
我不想知道余数是什么,我只想知道是否有余数作为布尔值。 因此,使用模运算符不是我想要的。 使用 C 语言会更可取,但任何语言都可以。
解决方法
如果你真的不能使用余数运算(作业约束?),那么你可以使用
check_remainder = b*(a/b) != a;
但其余的使用 %
是很自然的方式。
使用 div()
,希望它可以通过 1 个单一操作计算商和余数。
#include <stdlib.h>
//...
int a = 42,b = 5;
div_t c = div(a,b);
if (c.rem) /* remainder for a/b is not zero */;
//...
,
在计算出余数之前,您无法判断是否存在余数,这意味着您必须执行除法。
也就是说,您可以采取一些捷径,但前提是除数是 2 的幂。例如,如果最低有效位为 1,则除以 2 将有余数。通常,除以 2如果最低 n 个有效位的值不是 0000.....0(n 个零),则 n 次幂将有余数。
在汇编级别,一些架构(例如 x86)为您提供商和余数作为 DIV 指令的结果。
如果使用模数运算符(或内部使用的除法运算符)不是一种选择,你可以用天真的方法:
unsigned has_remainder (unsigned a,unsigned b)
{
while (a >= b)
a -= b;
return a;
}