🔵 문제 링크
https://www.acmicpc.net/problem/10757
💡 Point
- 큰 수를 문자열로 바꾸어 덧셈을 처리한다.
🔵 알고리즘
우리가 초등학생 때 배운 덧셈 올림 연산을 생각해 보자.
- 자리수를 맞추고
- 일의 자리 수부터 계산한다
- 이때, 값이 10이 넘어가면 십의 자리 숫자를 다음 숫자 더할 때 같이 더해 준다.
이것을 문자열을 이용해 그대로 구현하면 된다!
🔵 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a, string b)
{
string res;
// 큰 수로 자릿수를 맞춘다.
int maxLen = max(a.length(), b.length());
// 자릿수가 모자라는 수 앞에는 0을 붙인다.
a = string(maxLen - a.length(), '0') + a;
b = string(maxLen - b.length(), '0') + b;
int carry = 0; // 올림
// 맨 끝자리부터 계산하므로 i 초기값 = maxLen
for (int i = maxLen - 1; i >= 0; i--)
{
int digitSum = (a[i] - '0') + (b[i] - '0') + carry;
carry = digitSum / 10; // 올릴 거 있으면 저장
res += (digitSum % 10) + '0'; // '0'은 정수 -> char로 바꾸는 역할.
}
// 연산을 모두 마친 후에 올림 값이 남아 있다면 올림 값을 결과에 더함.
if (carry > 0) res += carry + '0';
// 결과를 뒤집어 출력
reverse(res.begin(), res.end());
return res;
}
int main()
{
string a, b;
cin >> a >> b;
string sum = add(a, b);
cout << sum;
return 0;
}
일의 자리씩 덧셈 후 나온 값을 줄줄이 뒤에 붙여주었으므로 마지막에 문자열을 reverse 해야 한다.
'PS' 카테고리의 다른 글
| [C++] Programmers Lv. 2 "주식가격" (0) | 2025.05.03 |
|---|---|
| [C++] Boj 14503 로봇 청소기 (1) | 2025.05.02 |
| [C++] Boj 1202 보석 도둑 (0) | 2025.04.29 |
| [C++] Programmers Lv. 2 "짝지어 제거하기" (0) | 2025.04.29 |
| [C++] Programmers Lv. 2 "괄호 회전하기" (1) | 2025.04.25 |