0. ๋ค์ด๊ฐ๋ฉฐ
๊ฐ๋ฐ์ ํ๊ฑฐ๋, ์ฝ๋ฉํ
์คํธ์์ ์ ์๋ก
๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ง๋๋ฉด ํ ๋ฒ์ฉ ์ฃผ์ด์ง๋ ์
๋ ฅ์ ํฌ๊ธฐ๊ฐ Longํ์ ์ด์ํ ์ ์์ ๋๊ฐ ๊ฐํน ์๋ค. ๋จผ์ ์ฝํ
์์ ์์ฃผ ์ฐ์ด๋ ์๋ฃํ์ธ int
์ Long
ํ์ ์ต๋, ์ต์๊ฐ์ ์์๋ณด์.
์ ์ํ ํ์ | ๋ฐ์ดํฐ ํํ ๋ฒ์ |
---|---|
int | -2,147,483,648 ~ 2,147,483,647 ($10^{10}$) |
long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 ($10^{18}$) |
long
์ด ์ ๋ง ๋ง์ ์์ ๋ฒ์๋ฅผ ์ปค๋ฒํ ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ๋ฐฑ์ค์ ๊ฑฐ์ ์์๊ฐ์ ๋ฌธ์ ๋ ์ด๋ฌํ ์๋ฃํ์ ๋ฐ์ด๋๋๋ค. ์ด๋์ ๋์ฒ๋ฒ 2๊ฐ์ง๋ฅผ ์ค๋ช
ํ๊ฒ ๋ค.
1. ์ค์ ์๋ฃํ์ธ Double
์ฌ์ฉ
Double
์ 64bit ๋ถ๋ ์์์ ์ผ๋ก ํํ๋ ์๋ฃํ์ผ๋ก ๋๋ต $ยฑ10^{308}$ ๊น์ง ํํ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ง์ ํ๊ธฐ๋ฒ
์ ํ์ฉํด ํํํ๋ฏ๋ก ์
๋ ฅ์ ์ ํํ ๊ฐ ํํ์ด ์๋๋ผ ๊ทผ์ฌ์ ์ผ๋ก ๋ํ๋ด๋ ๊ฒ์ ๋ถ๊ณผํ๋ค.
๋ง์ฝ ๊ณ์ฐ์ ๋ชฉ์ ์ด ๋์ ๋น๊ต๋ผ๋ฉด ํ์ฉํด๋ณผ๋ง ํ์ง๋ง, ์ ํํ ๊ฐ์ ํํ์ด๋ฉด ์ํ๋ ๋ต๊ณผ ์ค์ฐจ๊ฐ ์์ ์ ์๋ค.
2. BigInteger
ํด๋์ค ํ์ฉ
BigInteger
ํด๋์ค๋ ์์ ์ ๋ฐ๋
๋ฐฉ์์ ํ์ฉํด, ํํํด์ผํ ์ซ์์ ํฌ๊ธฐ๋ ์ ๋ฐ๋ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋น ๋ฐ๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฆฌ ํฐ ์๋ผ๋ ํํํ ์ ์๋ค. (์ฐ๋ฆฌ๊ฐ ์ฐ๋ ์์ ์๋ฃํ๋ค์ ๋ชจ๋ ๊ณ ์ ์ ๋ฐ๋
๋ก ์ธ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ 1~8byte ๋ด๋ก ์ ํด์ ธ ์๋ค.)
์ฃผ์ํด์ผํ ์ ์ BigInteger
๊ฐ์ฒด๋ก ํํํ ์๋ก ์ฌ์น ์ฐ์ฐ์ ํ๋ ค๋ฉด ๊ธฐํธ ๋์ BigInteger
๋ด๋ถ์ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
(1) BigInteger
๊ฐ์ฒด ์ ์ธ ๋ฐ ์ด๊ธฐํ
BigInteger bigNum = new BigInteger("ํํํ ์๋ฅผ String์ผ๋ก ์
๋ ฅ");
(2) ๋ง์
(.add()
)
BigInteger num1 = new BigInteger("9223372036854775808");
BigInteger num2 = new BigInteger("12345678901234567890");
BigInteger sum = num1.add(num2);
System.out.println("๋ง์
๊ฒฐ๊ณผ: " + sum);
(3) ๋บ์
(.subtract()
)
BigInteger difference = num2.subtract(num1);
System.out.println("๋บ์
๊ฒฐ๊ณผ: " + difference);
(4) ๊ณฑ์
(.multiply()
)
BigInteger product = num1.multiply(num2);
System.out.println("๊ณฑ์
๊ฒฐ๊ณผ: " + product);
(5) ๋๋์
(.divide()
)
BigInteger quotient = num2.divide(num1);
System.out.println("๋๋์
๊ฒฐ๊ณผ: " + quotient);
(6) ๋๋จธ์ง ์ฐ์ฐ (.remainder()
)
BigInteger remainder = num2.remainder(num1);
System.out.println("๋๋จธ์ง: " + remainder);
(7) ๋น๊ต ์ฐ์ฐ(.compareTo(BigInteger Other)
)
- ๋ฐํ๊ฐ
0
: ๋์ด ๊ฐ์ - ๋ฐํ๊ฐ
์์
: ํ์ฌ ๊ฐ์ด ๋ ํผ - ๋ฐํ๊ฐ
์์
: ํ์ฌ ๊ฐ์ด ๋ ์์ (์ธ์๋ก ๋ค์ด์จ ๊ฐ์ด ๋ ํผ)
int comparison = num1.compareTo(num2);
if (comparison == 0) System.out.println("num1๊ณผ num2๋ ๊ฐ์");
else if (comparison > 0) System.out.println("num1์ด num2๋ณด๋ค ํผ");
else System.out.println("num1์ด num2๋ณด๋ค ์์");
(8) ์ฃผ์์ โ ๏ธ
- Big Integer๋
๋ถ๋ณ ๊ฐ์ฒด
: ์ ๋งค์๋๋ค์ ๋ณด๋ฉด, ๋ง์ฝA + B
๋ฅผ ํ๋ค๊ณ ํ๋ฉด,A.add(B)
๋ก ํํํ๊ธฐ์, '๊ณ์ฐํ ๊ฐ์ด A์ ์ ์ฅ๋๋ ๊ฒ ์๋๊ฐ?' ํ๋ ์๊ฐ์ด ๋ค ์ ์๋ค. ํ์ง๋ง ๋ชจ๋ ์ฌ์น์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ ์๋ก์ด Big Integer ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๊ณ , ์๋ณธ ๊ฐ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค! - ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํผ: ๋งค ์ฌ์น์ฐ์ฐ๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ, BigInteger๋ฅผ ํ๋ ํํํ๋๋ฐ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ๋ค. ๋ฐ๋ผ์
BigInteger
๋ ์ ์ฌ์ ์์ ์ํฉ์ ํ์ํ ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค.