Java 模算子不';我不能给出正确的结果
为什么java中的模运算符与wolfram alpha不同 我的公式是:Java 模算子不';我不能给出正确的结果,java,Java,为什么java中的模运算符与wolfram alpha不同 我的公式是: var = (var-x) % 10 wolfram给了我一个正确的结果,例如 (0 - 1) % 10 = 9 Java给出了-1 我如何才能以最好的方式解决这个问题?如果需要,我会为这种情况编写自己的mod,比如 public int nonNegativeModOfDiff(int a, int b,int n) { int mod = (a-b)%n; return mod >= 0 ? mod
var = (var-x) % 10
wolfram给了我一个正确的结果,例如
(0 - 1) % 10 = 9
Java给出了-1
我如何才能以最好的方式解决这个问题?如果需要,我会为这种情况编写自己的mod,比如
public int nonNegativeModOfDiff(int a, int b,int n) {
int mod = (a-b)%n;
return mod >= 0 ? mod : mod + n;
}
如果需要,我会为这种情况编写自己的mod,比如
public int nonNegativeModOfDiff(int a, int b,int n) {
int mod = (a-b)%n;
return mod >= 0 ? mod : mod + n;
}
这应该可以做到:
class ModTest {
public static void main (String[] args) {
int x = -1;
int m = 10;
int y = mod(x, m);
System.out.println(y);
}
static int mod(int x, int m) {
return (x % m + m) % m;
}
}
这应该可以做到:
class ModTest {
public static void main (String[] args) {
int x = -1;
int m = 10;
int y = mod(x, m);
System.out.println(y);
}
static int mod(int x, int m) {
return (x % m + m) % m;
}
}
这就是
%
是如何定义的,并且在大多数编程语言中应该是有效的,即使相反的情况有时是有用的
我建议实施您自己的模方法:
int positiveModulo(a, b) {
int result = a % b;
if (result < 0) { result += b; }
return result;
}
int-positiveModulo(a,b){
int result=a%b;
如果(结果<0){result+=b;}
返回结果;
}
这就是%
的定义,在大多数编程语言中都应该是这样的,即使相反的情况有时会有用
我建议实施您自己的模方法:
int positiveModulo(a, b) {
int result = a % b;
if (result < 0) { result += b; }
return result;
}
int-positiveModulo(a,b){
int result=a%b;
如果(结果<0){result+=b;}
返回结果;
}
来自:“根据此规则,余数运算的结果只有在被除数为负时才能为负,只有在被除数为正时才能为正。此外,结果的大小始终小于除数的大小。”来自:“根据这条规则,余数运算的结果只有在股息为负时才能为负,只有在股息为正时才能为正。此外,结果的大小总是小于除数的大小。“这将产生1,而不是9。这将产生1,而不是9。-1模10=-1和-1模10=9都是correct@Dave模块化算法有时被称为时钟算法,因为它是循环的。所以在mod 10中,9=-1。请注意,%
是余数运算符,而不是模运算符。想到这一点,它的行为应该是有意义的…@dataNinja124如果它是一个戒指,是的(我想Wolfram就是这样运作的)。对于所有整数,我对运算符的理解是不同的,-1 mod 10=-1和-1 mod 10=9都是correct@Dave模块化算法有时被称为时钟算法,因为它是循环的。所以在mod 10中,9=-1。请注意,%
是余数运算符,而不是模运算符。想到这一点,它的行为应该是有意义的…@dataNinja124如果它是一个戒指,是的(我想Wolfram就是这样运作的)。对于所有整数,我对运算符的理解是不同的。谢谢。解决了问题,谢谢。解决了这个问题。