티스토리 뷰

알고리즘

백준 10757번 큰 수 A+B

심재철 2017. 9. 20. 23:07


수가 10의 1만승까지 가능하므로 현존하는 정수형 자료형으로는 절대 이 숫자들을 표현할 수 없다.

그렇기 때문에 문자열로 처리를 해야한다.


해결방법

stirng 2개에 각각 숫자로된 문자열을 입력받고나서


맨마지막수부터 더해가면서 올림수(carry)와 결과값(remain)을 구분하면서 계속 더해간다.


두 숫자의 자리수를 맞춰줘야 하므로 자리수가 더 적은쪽의 빈공간을 0으로 채웠다

예를들어 9999와 1을 더하게되면

9999와 0001을 더하게끔 만들었다 . 이렇게 표현해야 반복문을 좀더 쉽게 할 수 있었다.


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
using namespace std;
#include<iostream>
#include<string>
int main()
{
    string a, b,result;
    cin >> a >> b;
    if (a.size() > b.size())
    {
        string c;
        for (int i = 0; i < a.size() - b.size(); i++)
            c += '0';
        b = c + b;
    }
    else
    {
        string c;
        for (int i = 0; i < b.size() - a.size(); i++)
            c += '0';
        a = c + a;
    } //9999와 1일때 1앞의 3자리에 0 3개를 채우는 문장

    int carry = 0;
    while (a.size()!=0 && b.size() !=0)
    {
        int aback = a.back() - '0'; //문자열에서 맨마지막 문자를 숫자로 바꿈
        int bback = b.back() - '0'; //마찬가지
        int remain = (carry + aback + bback) % 10; //남김수 (9와1을더하면 캐리1 remain 0)
        carry = (carry + aback + bback) / 10; //올림수
        result = (char)(remain + '0'+ result; //결과 문자열에 합쳐줌
        a.pop_back();
        b.pop_back();
    }
    if(carry) //마지막 자리 까지 다더했는데 캐리가 있으면 캐리를 맨앞에 붙여줘야함.
        result = (char)(carry+'0'+ result;
    cout << result << endl;
    return 0;
}
cs

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함