본문 바로가기

Algorithm/BAEKJOON

[BOJ] 10757번 큰 수 A+B (C++)

728x90
반응형

www.acmicpc.net/problem/10757

 

10757번: 큰 수 A+B

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

www.acmicpc.net

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
	string a, b, tmp;
	cin >> a >> b;
	
	int num1[10001], num2[10001];
	int sum;
	vector<int> v;
	
	// 더 긴 문자열을 a로 저장
	if(a.size() < b.size()){
		tmp = a;
		a = b;
		b = tmp;
	}
	
	for(int i = 0; i < a.size(); i++)
		num1[i + 1] = a[i] - '0';
		
	for(int i = 0; i < b.size(); i++)
		num2[i + 1 + a.size() - b.size()] = b[i] - '0';
		
	for(int i = a.size(); i > 0; i--){
		sum = num1[i] + num2[i];
		if(sum >= 10){
			num1[i - 1]++;
			sum -= 10;
		}
		v.push_back(sum);
	}
	
	// 맨 앞자리 수 출력
	if(num1[0] != 0) cout << 1;
	
	for(int i = v.size() - 1; i >= 0; i--){
		cout << v[i];
	}
}

파이썬은 그냥 a+b로, 자바는 bigInteger을 사용해서 쉽게 풀 수 있지만 C/C++로 구현할 때는 성가신 문제이다.

 

입력이 만약 "975 44"라고 주어졌을 때 num 배열들은 아래와 같은 수들이 저장된다.

  [0] [1] [2] [3]
num1 0 9 7 5
num2 0 0 4 4

배열의 끝부분부터 덧셈을 하면서 벡터에 값들을 push 해주고 마지막에는 벡터를 거꾸로 출력해준다.

728x90
반응형