2012-11-04 2 views

답변

2

X mod -Y을 정의한대로 -X mod Y을 해결 한 다음 대답을 부정함으로써 계산할 수 있습니다.

예 : 1 mod -3 ->-1 mod 3 = 2 - 0이 아닌 다음 대답을 부정하는 경우 특히 자바에서>-2

수행 -X % YY를 추가합니다.

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

이 접근법의 문제점은 '음수 % 양수 = 음수' –

+0

@JanDvorak 주소가 – durron597

+1

이므로 모듈러스 결과가 0이면 y를 더하면 안됩니다. –

3

자바의 % 연산자는 나머지의의 계수 운영자 없습니다. (그들은 이 아닙니다. 같은 것입니다.) 당신이 얻는 다른 징후를 설명합니다. 현재 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)의 단순한 결과이다.

관련 문제