[Java]1~N까지의 곱(데이터타입, BigInteger)
[Java]1~N까지의 곱(데이터타입, BigInteger)
[문제] 키보드로부터 N을 입력받아 1~N까지의 곱을 구하시오(단, 0<N<9001)
[해결과정]
해결 전에 각각의 정수, 실수의 데이터 타입에는 범위가 있습니다.
int |
-2147483648 ~ 2147483647 |
long |
-9223372036854775808 ~ 9223372036854775807 |
double |
4.94E-324 ~ 1.79E+308 |
범위를 보니 딱 봐도 long으로는 어림도 없고 double은 잘 모르겠으니 한번 써보겠습니다.
public class Exam7 { public static void main(String args[]) { double i; double j=1; double k; Scanner sc = new Scanner(System.in); i = sc.nextInt(); for(k=1;k<=i;k++) { j = j*k; } System.out.println(j); } }
N에 1000을 넣으니 Infinity라는 결과가 뜨며 원하는 결과를 얻지 못하였습니다
해결하기 전에 타입별로 1~?까지의 곱이 가능한지 알아봤습니다.
① Int
② long
③ double
한번 타입별로 돌려보니 아래와 같은 결과를 얻을 수 있었습니다.
1~N까지의 곱에서 결과값을 얻는 N의 최대값 | |
int |
N = 16 |
long |
N = 25 |
double |
N = 170 |
double형으로도 위의 문제의 답을 얻을 수 없었습니다.
해결하기 위하여 BigInteger Class를 사용하겠습니다.
[해결답안]키보드로부터 N을 입력받아 1~N까지의 곱을 구하시오(단, 0<N<9001)
위와 같이 BigInteger를 사용하면 범위를 신경쓰지 않고 결과물을 출력 할 수 있습니다.
위에서는 곱하기만 사용하였기 때문에 bi2.multiply(bi);만 사용하였지만
더하기, 빼기, 나누기, 나머지등도 add, subtract, divide, mod를 사용하여
나타낼 수 있습니다.
문제에 N의 값을 최대 9000으로 설정한 까닭은 저의 컴퓨터 사양때문인지
콘솔창의 최대출력문제 때문인지는 몰라도 9080이상은 결과가 뜨지 않더라구요..
'Java > Java 예제' 카테고리의 다른 글
숫자 맞추기 게임 (0) | 2016.04.08 |
---|---|
Hello World출력 (0) | 2016.04.08 |
키보드로 구구단 입력받기(Scanner) (0) | 2016.04.08 |
소수 구하기(2~100) (0) | 2016.04.08 |
10의 약수의 개수,1~10약수의 개수 구하기 +활용 (0) | 2016.04.08 |