728x90
반응형
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
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int n;
string dp[10001];
string big_num_sum(string a, string b){
int sum;
string s;
vector<int> v, num1, num2;
if(a.size() < b.size()){
string tmp = a;
a = b;
b = tmp;
}
num1.push_back(0);
num2.push_back(0);
for (int i = 0; i < a.size() - b.size(); i++)
num2.push_back(0);
for(int i = 0; i < a.size(); i++)
num1.push_back(a[i] - '0');
for(int i = 0; i < b.size(); i++)
num2.push_back(b[i] - '0');
for(int i = a.size(); i > 0; i--){
sum = num1[i] + num2[i];
if(sum >= 10){
num1[i - 1]++;
sum -= 10;
}
v.push_back(sum);
}
if(num1.front() != 0) s.push_back('1');
for(int i = v.size() - 1; i >= 0; i--){
s.push_back(v[i] + 48);
}
return s;
}
int main() {
cin >> n;
dp[0] = '0'; dp[1] = '1';
for(int i = 2; i <= n; i++){
dp[i] = big_num_sum(dp[i - 1], dp[i - 2]);
}
cout << dp[n];
return 0;
}
입력이 커질수록 수의 크기가 기하급수적으로 증가하므로 문자열 배열로 저장하여 큰 수들의 덧셈을 처리하였다.
큰 수 연산에 대한 설명은 10757번 문제 참고
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 2644번 촌수계산 (C++) (0) | 2022.01.28 |
---|---|
[BOJ] 1914번 하노이 탑 (C++) (0) | 2022.01.13 |
[BOJ] 10757번 큰 수 A+B (C++) (0) | 2022.01.11 |
[BOJ] 1010번 다리 놓기 (C++) (0) | 2022.01.10 |
[BOJ] 9461번 파도반 수열 (C++) (0) | 2022.01.09 |