2017-03-06 6 views
0

코딩 퍼즐은 일반적으로 결과 mod (10^9 + 7)를 요구합니다. 설명 here을 참조하십시오.자바에서 많은 수의 mod (10^9 + 7) 수행 방법

매우 큰 2 개의 숫자가 있다고 가정합니다. 2 개의 큰 숫자 문자열을 말하십시오. 나는 그것들을 추가하고 mod (10^9 + 7)로 처리 된 결과를 필요로한다. 나는 어떻게 그것을 성취 할 수 있는가.

숫자가 작은 경우 코드는 다음과 같습니다.

Integer a = Integer.parseInt("123"); 
    Integer b = Integer.parseInt("456"); 
    Integer result = (a+b)%(10^9+7); 
    System.out.println("result"+result); 

매우 큰 숫자를 사용하여 동일한 작업을 수행하는 방법은 무엇입니까?

Integer a = Integer.parseInt("123456474575756568568786786786786783453453"); 
    Integer b = Integer.parseInt("456534543654564567567567567567564564456"); 
    Integer result = (a+b)%(10^9+7); 
    System.out.println("result"+result); 

이 경우 Integer 이외의 다른 값을 사용해야하며 "추가", "모듈러스"연산을 수행해야합니다.

이 경우에는 BidInteger, BigDecimal을 쉽게 사용할 수 없습니다. 제발 제안 해주세요.

+2

는 "쉽게 BidInteger를 사용할 수 없습니다"- 무슨 일이야 문제? 그냥 일해야합니다. FWIW를 사용하면 숫자를 수동으로 파싱하고 이동하면서 모듈로 축소를 적용 할 수 있습니다. 그러면 숫자가 처음에는 커지지 않습니다. – harold

+5

'10^9 + 7'은 ** 아닙니다 ** Java에서 9+ 7에 10을 쓰는 방법이 아닙니다. '^'는 XOR 연산자이며, 전원 연산자는 아닙니다. – Jesper

+0

작업하고자하는 숫자가 예제에서 보여준 것과 거의 비슷하다면, 'double'과 'BigInteger'만이 그렇게 할 수있는 유일한 방법입니다. 'Integer'가 충분하지 않습니다. –

답변

2

BigInteger를 그렇게 나쁘지 않다, 그것은 당신이 필요로 정확히 수행합니다

BigInteger a = new BigInteger("123456474575756568568786786786786783453453"); 
BigInteger b = new BigInteger("456534543654564567567567567567564564456"); 
BigInteger result = a.add(b).mod(BigInteger.TEN.pow(9).add(BigInteger.valueOf(7))); 
System.out.println("result: " + result); 

출력 :

결과 : 560775910

+0

"add, mod, power, valueOf"가있는 마지막 줄은 내가 코딩 할 수없는 것이 었습니다. 감사. –