백준 10826 피보나치 수 4
2023. 2. 14. 17:30ㆍ코딩 공부 연습
반응형
백준 10826 피보나치 수 4
이번 문제는 피보나치수를 구하는 간단한 문제였는데, c++ 에서 가장 큰 수 의 범위를 그냥 넘겨버려서 unsigned long 을 한다고 해결되는 문제가 아니었다.ㅜ 다른 언어는 상관이 없나 레벨이 엄청 낮았는데, 실버 5를 받을 만큼 쉬운 문제는 분명 아니다!
- 이 문제를 해결하기 위해 문자열로 입력을 받아 더하는 방식을 구현해야 했다.
string string_add(string x, string y)
{
int num;
int carry = 0;
string result;
reverse(x.begin(), x.end());
reverse(y.begin(), y.end());
while (x.length() < y.length()) {
x += '0';
}
while (x.length() > y.length()) {
y += '0';
}
for (int i = 0; i < x.length(); ++i) {
num = (x[i] - '0' + y[i] - '0' + carry) % 10;
result += to_string(num);
carry = (x[i] - '0' + y[i] - '0' + carry) / 10;
}
if (carry != 0) {
result += to_string(carry);
}
reverse(result.begin(), result.end());
return result;
}
987과 1597을 더해보자.
우선 reverse 를 사용해 숫자를 뒤집어 주고, 만약 자릿수가 다르다면 같게 통일 해주기 위해 뒤에 다 0을 붙여준다.
7890, 7951 가 만들어 질 것 이다.
이제 string을 0 부터 문자열 길이만큼 돌면서 숫자로 바꿔 더하고, 그 값이 10보다 클 경우 일의 자리 수만 저장하고 자릿수가 올라갈 때 1을 증가시켜 준다.
이 과정을 끝날 때까지 반복하면 된다!!!
'코딩 공부 연습' 카테고리의 다른 글
백준 4883 삼각 그래프 (0) | 2023.02.20 |
---|---|
백준 10942 팰린드롬? (0) | 2023.02.18 |
백준 16400 소수 화폐 (0) | 2023.02.09 |
백준 1153 네 개의 소수 (0) | 2023.01.25 |
백준 2206 벽 부수고 이동하기 (0) | 2023.01.12 |