큰 정수형을 나타낼 때
int는 10자리
long은 19자리
그 외를 넘어가면 String의 연산이 가능한 BigInteger를 사용하자
한가지 중요한 것은 import java.math.*;
를 해줄것!
대부분 팩토리얼과 같은 조합의 문제에서 꼭 오버플로우가 발생해서
확인하는 절차가 필요하며 long으로 선언해도 넘어가면 BigInteger를 사용하자.
(dynamic programming)
BigInteger bi = new BigInteger("1");
bi.add(BigInteger.valueOf(2));//덧셈 결과 : 3
bi.multiply(new BigInteger("4"));//곱하기 결과 : 4
bi.remainder(new BigInteger("4"));//나머지 결과 : 1
bi.subtract(new BigInteger("3"));//뺄셈 결과 : -2
// 뺄셈 substract아님 주의!!
백준의 15829번은 이 BigInteger를 사용해야 100점을 맞는다.
import java.math.*;
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int A = Integer.parseInt(br.readLine());
String input = br.readLine();
BigInteger sum= new BigInteger("0");
BigInteger gegom= new BigInteger("1");
BigInteger three= new BigInteger("31");
for(int i=0;i<A;i++){
BigInteger a = BigInteger.valueOf(input.charAt(i)-96);
if(i!=0) gegom=gegom.multiply(three);
sum= sum.add(a.multiply(gegom));
}
System.out.println(sum.remainder(BigInteger.valueOf(1234567891)));
}
}