[백준] 10757번. 큰 수 A + B

leeeha·2023년 1월 31일
0

백준

목록 보기
83/186
post-thumbnail

문제

https://www.acmicpc.net/problem/10757


풀이

C++ 데이터 타입별 범위: https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170

문제에 주어진 수의 범위를 보면 0 < A,B < 10^10000이므로 이들의 합은 unsigned long long 타입에도 담을 수가 없다. 따라서 문자열로 수를 입력 받은 다음에 뒷자리부터 하나씩 더해줘야 한다.

참고: https://abcdefgh123123.tistory.com/194
https://dev-minji.tistory.com/51

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

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	string a, b; 
	cin >> a >> b; 

	int lenA = a.length(); 
	int lenB = b.length(); 

	// A의 자릿수가 크도록 
	if(lenB > lenA){
		swap(a, b);
		swap(lenA, lenB);
	}

	// B의 자릿수가 더 작으면 0으로 맞추기 
	string temp = "";
	if(lenA != lenB){
		for(int i = 0; i < lenA - lenB; i++){
			temp += "0";
		}
	}
	b = temp + b; 

	// 뒷자리부터 하나씩 더하기 
	string ans = "";
	int carry = 0;
	for(int i = lenA - 1; i >= 0; i--){
		int sum = (a[i] - '0') + (b[i] - '0') + carry; 
		if(sum < 0) sum += '0';
		if(sum > 9) carry = 1; 
		else carry = 0; 
		ans += sum % 10 + '0'; 
	}

	if(carry == 1) ans += "1";

	for(int i = ans.size() - 1; i >= 0; i--){
		cout << ans[i]; 
	}
	
	return 0;
}

profile
습관이 될 때까지 📝

0개의 댓글