[백준 7489] 팩토리얼 JAVA

2024. 11. 7. 09:50·코딩테스트/백준

 

 

 

 

 


 

 

 

 

기존에 작성한 코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		int[] n = new int[t];
		for (int i = 0; i < t; i++) {
			n[i] = sc.nextInt();
		}
		
		String[] a = new String[t];		
		for (int i = 0; i < n.length; i++) {
			a[i] = Integer.toString(pac(n[i])).replaceAll("0+$", "");
			//a[i] = a[i].replaceAll("0+$", "");
		}
		
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i].charAt(a[i].length()-1));
		}
	}

	static int pac(int n) {
		if(n < 2) {
			return n;
		}
		return n*pac(n-1);
	}
}

 

결과는 런타임 에러..

 

이것저것 시도해보다 보니 int형보다 큰 숫자가 들어가서 그렇다고 한다.

 

 

 

 

 

 

새로 작성한 코드

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		int[] n = new int[t];
		for (int i = 0; i < t; i++) {
			n[i] = sc.nextInt();
		}
		
		String[] a = new String[t];		
		for (int i = 0; i < n.length; i++) {
			a[i] = pac(n[i]).toString();
			a[i] = a[i].replaceAll("0+$", "");
		}
		
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i].charAt(a[i].length()-1));
		}
	}
	
	static BigInteger pac(int n) {
        BigInteger result = BigInteger.ONE;
        for (int i = 1; i <= n; i++) {
            result = result.multiply(BigInteger.valueOf(i));
        }
        return result;
    }
}

 

빅인티저 BigInteger는 처음 이번 계기로 처음 알게되었다.

 

int와 long은 크기 제한이 있는 기본형 타입이며, BigInteger는 그 범위에 제한이 없고 매우 큰 정수를 처리할 수 있다는 장점이 있다.

 

Type 최소값 최대값
int -2,147,483,648 (-2^31) 2,147,483,647 (2^31 - 1)
long -9,223,372,036,854,775,808 (-2^63) 9,223,372,036,854,775,807 (2^63 - 1)
BigInteger 시스템 메모리에 의존 (이론상 무제한) 시스템 메모리에 의존 (이론상 무제한)

 

 

 

 

채점 결과

 

 

 

 

반응형

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 1157] 단어 공부 JAVA - LinkedHashSet, HashMap 사용  (0) 2024.11.09
[백준 1316] 그룹 단어 체커 JAVA - 데크(Deque) 사용  (0) 2024.11.08
[백준 11718] 그대로 출력하기 JAVA  (0) 2024.10.30
[백준 10809] 알파벳 찾기 JAVA  (0) 2024.10.29
[백준 2588] 곱셈, [2908] 상수 JAVA  (0) 2024.01.29
'코딩테스트/백준' 카테고리의 다른 글
  • [백준 1157] 단어 공부 JAVA - LinkedHashSet, HashMap 사용
  • [백준 1316] 그룹 단어 체커 JAVA - 데크(Deque) 사용
  • [백준 11718] 그대로 출력하기 JAVA
  • [백준 10809] 알파벳 찾기 JAVA
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (86) N
      • 일기 (2)
      • Python (1)
      • Java (5) N
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (18)
        • Spring (7)
        • JavaScript (3)
        • WebSquare (5)
        • React (3)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (18)
        • Server (5)
        • Cloud (12)
        • Linux (1)
      • 자격증 (9)
        • 정보처리기사 (2)
        • AICE (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    머신러닝
    cloud DB
    티스토리챌린지
    db
    AICE
    EC2
    Associate
    Java
    tomcat
    docker
    리액트
    톰캣
    Spring
    오블완
    websquare
    백준
    클라우드 배포
    docker배포
    SpringBoot
    웹스퀘어
    AI
    백준자바
    알고리즘
    react
    AICE Associate
    자바
    MySQL
    Apache
    클라우드
    dockerspring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
오은이
[백준 7489] 팩토리얼 JAVA
상단으로

티스토리툴바