문제 핵심 포인트
굉장히 큰 크기(long보다 큰)의 int를 어떻게 계산할 것인가?
방법1. BigInteger 클래스 사용
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BigInteger big1 = scan.nextBigInteger();
BigInteger big2 = scan.nextBigInteger();
System.out.println(big1.add(big2));
}
}
방법2. 배열을 이용해서 계산
(아래 코드에서 BufferWriter를 사용할 때 주의할 점 : BufferWriter는 버퍼를 잡아 놓았기 때문에 마지막에 bw.flush, bw.close를 해줘야 한다.)
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
String a = st.nextToken();
String b = st.nextToken();
int maxLen = Math.max(a.length(), b.length());
//맨 앞이 더해서 10이 넘어갈 수 있으니 +1 추가
int aL[] = new int[maxLen+1];
int bL[] = new int[maxLen+1];
for(int i=a.length()-1, idx=0; i>=0; i--, idx++){
aL[idx] = a.charAt(i) - '0';
}
for(int i=b.length()-1, idx=0; i>=0; i--, idx++){
bL[idx] = b.charAt(i) - '0';
}
for(int i=0; i<maxLen; i++){
aL[i+1] += (aL[i]+bL[i])/10;
aL[i] = (aL[i]+bL[i])%10;
}
//맨 앞에 1이면 출력
if(aL[maxLen] != 0)
bw.write(Integer.toString(aL[maxLen]));
//나머지 전부 출력
for(int i=maxLen-1; i>=0; i--)
bw.write(Integer.toString(aL[i]));
bw.flush();
bw.close();
br.close();
}
}
'백준' 카테고리의 다른 글
백준 2839번 - 설탕배달 문제 - Java (0) | 2023.07.17 |
---|---|
백준 1018 - 체스판 문제 - Java (0) | 2023.07.16 |
백준 24313번 - BigO표기법 문제설명 - Java (0) | 2023.07.12 |
백준 24264 -Java (0) | 2023.07.09 |
백준 11382번 - Java (0) | 2023.05.31 |
문제 핵심 포인트
굉장히 큰 크기(long보다 큰)의 int를 어떻게 계산할 것인가?
방법1. BigInteger 클래스 사용
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BigInteger big1 = scan.nextBigInteger();
BigInteger big2 = scan.nextBigInteger();
System.out.println(big1.add(big2));
}
}
방법2. 배열을 이용해서 계산
(아래 코드에서 BufferWriter를 사용할 때 주의할 점 : BufferWriter는 버퍼를 잡아 놓았기 때문에 마지막에 bw.flush, bw.close를 해줘야 한다.)
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
String a = st.nextToken();
String b = st.nextToken();
int maxLen = Math.max(a.length(), b.length());
//맨 앞이 더해서 10이 넘어갈 수 있으니 +1 추가
int aL[] = new int[maxLen+1];
int bL[] = new int[maxLen+1];
for(int i=a.length()-1, idx=0; i>=0; i--, idx++){
aL[idx] = a.charAt(i) - '0';
}
for(int i=b.length()-1, idx=0; i>=0; i--, idx++){
bL[idx] = b.charAt(i) - '0';
}
for(int i=0; i<maxLen; i++){
aL[i+1] += (aL[i]+bL[i])/10;
aL[i] = (aL[i]+bL[i])%10;
}
//맨 앞에 1이면 출력
if(aL[maxLen] != 0)
bw.write(Integer.toString(aL[maxLen]));
//나머지 전부 출력
for(int i=maxLen-1; i>=0; i--)
bw.write(Integer.toString(aL[i]));
bw.flush();
bw.close();
br.close();
}
}
'백준' 카테고리의 다른 글
백준 2839번 - 설탕배달 문제 - Java (0) | 2023.07.17 |
---|---|
백준 1018 - 체스판 문제 - Java (0) | 2023.07.16 |
백준 24313번 - BigO표기법 문제설명 - Java (0) | 2023.07.12 |
백준 24264 -Java (0) | 2023.07.09 |
백준 11382번 - Java (0) | 2023.05.31 |