알고리즘 모음(C++)

백준 10757 - 큰 수 A+B(C++) 본문

백준

백준 10757 - 큰 수 A+B(C++)

공대생의 잡다한 사전 2023. 1. 28. 16:55

문제 링크입니다. https://www.acmicpc.net/problem/10757

 

10757번: 큰 수 A+B

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

www.acmicpc.net

python을 이용하면 굉장히 쉽게 풀 수 있겠지만, C or C++은 자료형에 수의 한계가 정해져 있습니다.

따라서 큰 수 계산을 위한 코드를 짜야했던 문제입니다.

 

접근 방법은 먼저, 두 수를 뒤집습니다. 1의 자리부터 계산하기 위함입니다.

for문을 통해 1자리씩 넘어가면서 계산을 합니다.

한자리수의 합을 계산한 뒤, 이를 string을 사용한 정답에 계속 이어 붙여주는 방법입니다.

 

 

자세한 것은 코드를 참고해주세요

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#include <stack>
#include <map>

using namespace std;

string a, b;
int ans[100000];
string Ans;

void solve() {
    int num = 0;
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    for(int i = 0; i < max(a.size(), b.size()); i++){
        int sum = 0;
        if(a.size() >= i + 1&& b.size() < i + 1) sum = a[i] - '0';
        else if(a.size() < i + 1 && b.size() >= i + 1) sum = b[i] - '0';
        else sum = (b[i] - '0' + a[i] - '0');
        ans[i] += sum;
        ans[i+1] += (ans[i] / 10);
        ans[i] %= 10;
        Ans += ans[i] + '0'; 
        num++;
    }
    if(ans[num] > 0) Ans += ans[num] + '0';
    reverse(Ans.begin(), Ans.end());
    cout << Ans;
}

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> a >> b;
	solve();
	return 0;
}

 

 

질문 및 조언은 댓글을 남겨주세요

'백준' 카테고리의 다른 글

백준 7453 - 합이 0인 네 정수(C++)  (0) 2023.01.28
백준 11652- 카드(C++)  (0) 2023.01.28
백준 1759 - 암호 만들기(C++)  (0) 2023.01.28
백준 1450 - 냅색 문제(C++)  (0) 2023.01.24
백준 1208 - 부분수열의 합 2(C++, 복습)  (0) 2023.01.23