반응형
개요
알고리즘 문제를 풀다 보면, 숫자 범위가 long long 타입조차 초과하는 경우가 발생한다.
이럴 때는 string 타입으로 바꿔 계산할 필요가 있다.
풀이
원활한 계산을 위해 길이가 더 작은 string에 다른 string의 길이와 같게 되도록 앞에 0을 붙여준다.
예를 들어 17547 + 49의 경우 17547 + 00049로 만들어 준다.
그 후, 뒤에서 부터 덧셈을 진행하여 sum, carry를 계산하고 마지막에도 carry가 1이 발생하면 1을 앞에 붙여준다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
string AddTwoString(string a, string b)
{
string result = "";
if (a.length() > b.length())
{
while (a.length() != b.length())
{
b = '0' + b;
}
}
else
{
while (a.length() != b.length())
{
a = '0' + a;
}
}
int sum = 0;
int carry = 0;
for (int i = a.length() - 1; i >= 0; i--)
{
sum = (a[i] - '0') + (b[i] - '0') + carry;
if (sum >= 10)
{
sum -= 10;
carry = 1;
}
else
{
carry = 0;
}
result = to_string(sum) + result;
}
if (carry == 1)
{
result = '1' + result;
}
return result;
}
|
cs |
반응형
'언어 > C++' 카테고리의 다른 글
[C++] iterator로 set, vector 원소 삭제하기 (cannot increment value-intialized map/set) (0) | 2022.11.19 |
---|---|
no viable conversion from 'value_type' (aka 'char') to 'string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') (0) | 2022.11.05 |
[C++] 상수 및 비상수 멤버 함수에서 코드 중복 현상 피하기 (0) | 2022.07.22 |
[C++] Inline 함수 (0) | 2022.07.19 |
[C++] string 한글 출력 (0) | 2022.07.15 |