백준 10757 큰 수 A + B

클로이·2020년 8월 17일
0

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

풀이

(0 < A,B < 10^10000) 엄청나게 큰 수 이므로 long long, unsigned long long 을 사용해도 풀 수 없다.

아이디어

이런 큰 수의 덧셈은 배열을 사용 하거나, 문자열을 사용해 풀 수 있다.
나는 문자열을 사용해 풀었다. A와 B를 문자열로 받고, 덧셈 결과를 문자열로 반환한다.
a가 큰 수이든 b가 큰 수 이든 상관없도록 아래와 같이 해주었다.

while (aSize > 0 || bSize > 0) {
        int k1 = 0;
        if(aSize>0){
            k1 = a[--aSize] - '0';
        }
        int k2 = 0;
        if (bSize > 0) {
            k2 = b[--bSize] - '0';
        }
   
}

아래는 AC를 받은 코드이다.

#include <iostream>
#include <string>
 
using namespace std;
 
// 10231435
//   231291
// --------
// 10462726
 
 
// 큰 수 덧셈
string big_integer(string& a, string& b) {
    int aSize = a.length();
    int bSize = b.length();
    
    string rans = "";
    int c = 0;
    // 뒤에서 부터 계산
    while (aSize > 0 || bSize > 0) {
        int k1 = 0;
        if(aSize>0){
            k1 = a[--aSize] - '0';
        }
        int k2 = 0;
        if (bSize > 0) {
            k2 = b[--bSize] - '0';
        }
        int ret = k1 + k2 + c;
        c = ret / 10;
        ret %= 10;
        char cur = ret + '0';
        rans += cur;
    }
    if (c > 0) {
        rans += c + '0';
    }
    string ans = "";
    for (int i = (int)rans.length()-1; i >= 0; --i) {
        ans += rans[i];
    }
    return ans;
}
int main(void) {
    string a;
    string b;
    cin >> a;
    cin >> b;
    cout << big_integer(a, b) << "\n";
 
    return 0;
}

비슷한 문제

profile
개발자가 되고싶어요

0개의 댓글