Peony의 기록 창고 🌼
반응형

10826번 피보나치 수 4

https://www.acmicpc.net/problem/10826

 

10826번: 피보나치 수 4

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

 

문제


피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

 

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

 

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

 

입력


첫째 줄에 n이 주어진다. n은 10,000보다 작거나 같은 자연수 또는 0이다.

 

출력


첫째 줄에 n번째 피보나치 수를 출력한다.

 

 

알고리즘


10,000 번째 피보나치 수열이 어마어마하게 길어서 BigInterger로 선언해야한다.

 

BigInterger 선언

BigInteger bigInteger = new BigInteger("10000");

BigInteger 계산

BigInteger number1 = new BigInteger("100000");
BigInteger number2 = new BigInteger("10000");
		
System.out.println("덧셈(+) : " +number1.add(number2));
System.out.println("뺄셈(-) : " +number1.subtract(number2));
System.out.println("곱셈(*) : " +number1.multiply(number2));
System.out.println("나눗셈(/) : " +number1.divide(number2));
System.out.println("나머지(%) : " +number1.remainder(number2));

BigInteger 형 변환

BigInteger biginteger = BigInteger.valueOf(100000); //int -> BigIntger

int int_bigInteger = biginteger.intValue(); //BigIntger -> int
long long_bigInteger = biginteger.longValue(); //BigIntger -> long
float float_bigInteger = biginteger.floatValue(); //BigIntger -> float
double double_bigInteger = biginteger.doubleValue(); //BigIntger -> double
String String_bigInteger = biginteger.toString(); //BigIntger -> String

BigInteger 두 수 비교

//두 수 비교 compareTo 맞으면 0   틀리면 -1
int compare = number1.compareTo(number2);

 

코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;


public class Main {
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        fibonacci(N);
        System.out.print(sb);
    }
    static void fibonacci(int N) {
        BigInteger first = new BigInteger("0");
        BigInteger second = new BigInteger("1");

        if(N == 0) sb.append(0).append("\n");
        else if(N == 1) sb.append(1).append("\n");
        else { //N >= 2
            for (int i = 2; i <= N; i++) {
                BigInteger temp = second;
                second = second.add(first);
                first = temp;
            }
            sb.append(second).append("\n");
        }

    }
}
반응형
profile

Peony의 기록 창고 🌼

@myeongju