프로그래밍/Java

Java BigInteger class 사용하기

seungdols 2016. 4. 29. 13:20
Edit


주로 int 형 타입을 사용하게 되는데, 이 정수형 타입은 허용 가능한 범위가 존재합니다.

그럴때는 Java 언어에서 지원하는 BigInteger Class, BigDecimal Class를 사용할 수 있습니다. 해당 클래스 또한 표현 가능한 범위가 있는 것으로 알고 있는데, 대략 100억은 가볍게 표현 가능합니다.

사용하는 방법은 간단합니다.
(참고로 Class가 무엇인지, API가 무엇인지는 알고 계셔야 합니다.)

1. public void longNumberSum(long x, long y)
2.
{
3. BigInteger a = BigInteger.valueOf(x);
4. BigInteger b = BigInteger.valueOf(y);
5. BigInteger result = a.add(b);//Class 이므로 메소드 형태로 가감승제 외 다른 기능을 제공합니다.
6.
7. System.out.println(result);
8. }

예를 들어 인자로 x, y를 입력하는데 두 수의 크기가 long이고, 덧셈을 한다면 오버플로우(Overflow)를 발생할 수 있으습니다.

오버플로우는 연산간의 오작동인데, 이를 악용한 해킹 기법도 존재하므로 없어야 하는 프로그램 상의 버그입니다.

위처럼 사용하면 되고, BigInteger.Zero/One/Ten 같은 Immutable한 미리 정의 된 값들도 있으니 상수 값을 사용한다면 바로 사용하시면 될 것 같습니다.

BigInteger Class API

%23%23%23Java%20BigInteger%20class%20%uC0AC%uC6A9%uD558%uAE30%20%0A%0A%uC8FC%uB85C%20int%20%uD615%20%uD0C0%uC785%uC744%20%uC0AC%uC6A9%uD558%uAC8C%20%uB418%uB294%uB370%2C%20%uC774%20%uC815%uC218%uD615%20%uD0C0%uC785%uC740%20%uD5C8%uC6A9%20%uAC00%uB2A5%uD55C%20%uBC94%uC704%uAC00%20%uC874%uC7AC%uD569%uB2C8%uB2E4.%20%0A%0A%uADF8%uB7F4%uB54C%uB294%20Java%20%uC5B8%uC5B4%uC5D0%uC11C%20%uC9C0%uC6D0%uD558%uB294%20BigInteger%20Class%2C%20BigDecimal%20Class%uB97C%20%uC0AC%uC6A9%uD560%20%uC218%20%uC788%uC2B5%uB2C8%uB2E4.%20%uD574%uB2F9%20%uD074%uB798%uC2A4%20%uB610%uD55C%20%uD45C%uD604%20%uAC00%uB2A5%uD55C%20%uBC94%uC704%uAC00%20%uC788%uB294%20%uAC83%uC73C%uB85C%20%uC54C%uACE0%20%uC788%uB294%uB370%2C%20%uB300%uB7B5%20100%uC5B5%uC740%20%uAC00%uBCCD%uAC8C%20%uD45C%uD604%20%uAC00%uB2A5%uD569%uB2C8%uB2E4.%0A%0A%uC0AC%uC6A9%uD558%uB294%20%uBC29%uBC95%uC740%20%uAC04%uB2E8%uD569%uB2C8%uB2E4.%20%0A%28%uCC38%uACE0%uB85C%20Class%uAC00%20%uBB34%uC5C7%uC778%uC9C0%2C%20API%uAC00%20%uBB34%uC5C7%uC778%uC9C0%uB294%20%uC54C%uACE0%20%uACC4%uC154%uC57C%20%uD569%uB2C8%uB2E4.%29%0A%60%60%60java%0A%20public%20void%20longNumberSum%28long%20x%2C%20long%20y%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20BigInteger%20a%20%3D%20BigInteger.valueOf%28x%29%3B%0A%20%20%20%20%20%20%20%20BigInteger%20b%20%3D%20BigInteger.valueOf%28y%29%3B%0A%20%20%20%20%20%20%20%20BigInteger%20result%20%3D%20a.add%28b%29%3B//Class%20%uC774%uBBC0%uB85C%20%uBA54%uC18C%uB4DC%20%uD615%uD0DC%uB85C%20%uAC00%uAC10%uC2B9%uC81C%20%uC678%20%uB2E4%uB978%20%uAE30%uB2A5%uC744%20%uC81C%uACF5%uD569%uB2C8%uB2E4.%0A%0A%20%20%20%20%20%20%20%20System.out.println%28result%29%3B%0A%20%20%20%20%7D%0A%60%60%60%0A%uC608%uB97C%20%uB4E4%uC5B4%20%uC778%uC790%uB85C%20x%2C%20y%uB97C%20%uC785%uB825%uD558%uB294%uB370%20%uB450%20%uC218%uC758%20%uD06C%uAE30%uAC00%20long%uC774%uACE0%2C%20%uB367%uC148%uC744%20%uD55C%uB2E4%uBA74%20%uC624%uBC84%uD50C%uB85C%uC6B0%28Overflow%29%uB97C%20%uBC1C%uC0DD%uD560%20%uC218%20%uC788%uC73C%uC2B5%uB2C8%uB2E4.%20%0A%0A%uC624%uBC84%uD50C%uB85C%uC6B0%uB294%20%uC5F0%uC0B0%uAC04%uC758%20%uC624%uC791%uB3D9%uC778%uB370%2C%20%uC774%uB97C%20%uC545%uC6A9%uD55C%20%uD574%uD0B9%20%uAE30%uBC95%uB3C4%20%uC874%uC7AC%uD558%uBBC0%uB85C%20%uC5C6%uC5B4%uC57C%20%uD558%uB294%20%uD504%uB85C%uADF8%uB7A8%20%uC0C1%uC758%20%uBC84%uADF8%uC785%uB2C8%uB2E4.%0A%0A%uC704%uCC98%uB7FC%20%uC0AC%uC6A9%uD558%uBA74%20%uB418%uACE0%2C%20BigInteger.Zero/One/Ten%20%uAC19%uC740%20Immutable%uD55C%20%uBBF8%uB9AC%20%uC815%uC758%20%uB41C%20%uAC12%uB4E4%uB3C4%20%uC788%uC73C%uB2C8%20%uC0C1%uC218%20%uAC12%uC744%20%uC0AC%uC6A9%uD55C%uB2E4%uBA74%20%uBC14%uB85C%20%uC0AC%uC6A9%uD558%uC2DC%uBA74%20%uB420%20%uAC83%20%uAC19%uC2B5%uB2C8%uB2E4.%0A%0A%0A%5BBigInteger%20Class%20API%5D%28https%3A//docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html%29%0A%0A%0A


반응형

'프로그래밍 > Java' 카테고리의 다른 글

Top 10 Mistakes Java Developers Make  (0) 2016.07.14
Java 8 시작 하기  (0) 2016.06.10
Intellij IDE Gradle java Project 생성하기  (0) 2016.04.26
예외처리 관련 기본기  (0) 2015.12.28
Java언어에서의 중첩 클래스  (0) 2015.12.23