문제 : https://www.acmicpc.net/problem/10826
[ 알고리즘풀이 ]
최대 Input이 10,000입니다. 10,000번 째 피보나치는 int, long long 형으로도 모두 표현할 수 없으므로 문자배열을 이용한 덧셈으로 문제를 해결해야합니다.
( 문자배열을 이용한 큰 수 덧셈 포스팅 : https://travelbeeee.tistory.com/193 )
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string string_add(string a, string b) {
int sum = 0;
string result;
while (!a.empty() || !b.empty() || sum) {
if (!a.empty()) {
sum += a.back() - '0';
a.pop_back();
}
if (!b.empty()) {
sum += b.back() - '0';
b.pop_back();
}
result.push_back((sum % 10) + '0');
sum /= 10;
}
reverse(result.begin(), result.end());
return result;
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
string first = "1", second = "1", temp;
int N;
cin >> N;
if (N == 0){
cout << 0;
return 0;
}
for (int i = 0; i < N - 2; i++) {
temp = string_add(first, second);
first = second;
second = temp;
}
cout << second;
return 0;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 2225 : 합분해 - travelbeeee (0) | 2020.02.06 |
---|---|
[BOJ] 11049 : 행렬 곱셈 순서 - travelbeeee (0) | 2020.02.06 |
[BOJ] 18242 : 네모네모 시력검사 - travelbeeee (0) | 2020.02.05 |
[BOJ] 10164 : 격자상의 경로 - travelbeeee (0) | 2020.02.05 |
[BOJ] 3076 : SAHOVNICA - travelbeeee (0) | 2020.02.04 |