언어/C++

[C++] string 덧셈

겜도리도리 2022. 9. 17. 11:45
반응형

개요

알고리즘 문제를 풀다 보면, 숫자 범위가 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
반응형