编写一个程序来查找除以两个数字的余数,而不使用%运算符? 在Java中

如何在不使用模运算符的情况下找到除以两个数的余数!! 我的老师给了我这个精确的练习,这只是我在一门名为编程基础的课程中的第五次讲座。
我已经尝试过这个等式,

a%b = a - (a/b)*b 

但它总是返回零!

我刚试过这个

 public static void main (String [] args){ int a = 50; int b = 9; int c = a%b; int d = a - (a/b)*b; System.out.println(c); System.out.println(d); } 

它似乎工作。 你的变量是什么类型的?

好吧,你可以做模数运算符通常在内部做的事情。

在循环内部,反复减去b 。 当这不再可能时,您留下的号码就是您的答案。

这是一个代码示例。 如果您尝试为十进制数完成此操作,请注意浮点值的舍入错误。

 double result = a; while(result - b >= 0) { result -= b; } return result; 

请注意,如果您正在使用整数,并且允许使用除法运算符,则不需要使用循环。

但是,请记住,所有划分都是重复减法。 如果这是出于教学目的,我认为以我的方式做到这一点会更酷。

doublefloat数字上执行%是没有意义的,因为浮点数实际上每个都代表一个非常小的值范围,而不是精确的值。 通常,浮点数的内部表示与该范围内的数字不是您用于创建数字的实际小数。 这意味着对于浮点类型, %的结果是正式未定义的。

如果你在Java中尝试0.3 % 0.1 ,你实际上得到0.09999999999999998 ,这看起来乍一看是不正确的; 但考虑到浮点数真正代表什么,这与任何其他结果一样有意义。

这是解决%的最简单的解决方案,而不是实际使用%

 a - b * (long)(a/b); 

它会比重复减法的答案表现更好,因为它不必反复循环。

但是这个解决方案不可避免地成为与本页某些其他答案相同的陷阱的受害者,即“正确”答案正式未定义。

如果您的数字非常大,此解决方案也会出现溢出问题。

您需要使用a / b的Math.floor。

你有一个%b = a – (a / b)* b但实际上是%b = a-(Math.floor(a / b)* b)

这是因为没有math.floor它包含小数余数和(a / b)* b等于a所以当你从a中减去它时,你每次都会得到0,就像你经历过的那样。

当使用double s时,该等式将始终返回0 。 当使用int ,由于截断(整数除法),方程必须起作用。

这是计算除法中余数的算法。 假设您要找到a % b

 while dividend is larger or equal than divisor substract divisor from dividend print last result 

在Java中实现它看起来像:

 public static void main(String[] args) { double a = 5, b = 2; while (a >= b) { a -= b; } System.out.println(a); }