2012-11-04 25 views

回答

2

X mod -Y如您所定義的,它可以通過求解-X mod Y然後否定答案來計算。

實施例:1 mod -3 - >-1 mod 3 = 2 - >-2

在Java具體地,做-X % Y,再加入Y如果非零,則否定答案。

public static int negativeMod(int x, int y) { 
    if (y > 0) return x % y; 

    int newAnswer = (-1 * x) % (-1 * y); 
    if (newAnswer != 0) newAnswer -= y; 

    return -1 * newAnswer; 
} 
+0

這種方法的問題是,根據Java,'negative%positive = negative' –

+0

@JanDvorak address – durron597

+1

如果模數結果爲零,則不應該添加y。 –

3

%經營者在Java中是不運營商,它的其餘。 (他們是而不是是同樣的事情)這解釋了你得到的不同跡象。從當前Java Language Specification,部分§15.17.3

二進制%操作者被說成從一個隱含的除法得到其操作數的剩餘部分;左邊的操作數是紅利,右邊的操作數是除數。

在C和C++中,餘數運算符只接受整數操作數,但在Java編程語言中,它也接受浮點操作數。

在二進制數值提升(§5.6.2)之後爲整數的操作數的其餘操作會生成一個結果值,使得(a/b)* b +(a%b)等於a。

即使在特殊情況下,該特徵也是成立的,即股利是其類型的最大可能幅度的負整數,除數是-1(餘數爲0)。

從這個規則可以看出,只有當股利是負數時剩餘操作的結果纔是負的,並且只有當股利是正數時纔可以是正數。而且,結果的幅度總是小於除數的幅度。

0

這很簡單。如果餘數不爲0,則減去模數。例如1 mod -3,1 - 3是-2,你想要的答案。這是數學標識a == a - n(mod n)的簡單結果。

相關問題