No Rules Rules

큰 수 A+B (feat. 백준, 10757번) 본문

생활/코테

큰 수 A+B (feat. 백준, 10757번)

개발하는 완두콩 2022. 7. 31. 17:22
728x90
반응형

큰 수 A+B
https://www.acmicpc.net/problem/10757

 

10757번: 큰 수 A+B

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

www.acmicpc.net

반응형
// woohyeon.kim
// https://www.acmicpc.net/problem/10757
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void zero_padding(string& str1, string& str2) {
	string* bigger = nullptr, *smaller = nullptr;
	if (str1.size() > str2.size())
		bigger = &str1, smaller = &str2;
	else if (str1.size() < str2.size())
		bigger = &str2, smaller = &str1;
	if (bigger && smaller) {
		register int need_padding_size = static_cast<int>(bigger->size() - smaller->size());
		while (need_padding_size--)
			smaller->push_back('0');
	}
}
int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
	string str1, str2, ans;
	cin >> str1 >> str2;
	reverse(str1.begin(), str1.end()), reverse(str2.begin(), str2.end());
	zero_padding(str1, str2);
	register int v, v1, v2, carry = 0;
	for (register int i = 0; i < static_cast<int>(str1.size()); ++i) {
		v1 = str1.at(i) - '0';
		v2 = str2.at(i) - '0';
		v = v1 + v2 + carry;
		carry = v / 10, v = v % 10;
		ans.push_back(v + '0');
	}
	if (carry != 0)
		ans.push_back(carry + '0');
	reverse(ans.begin(), ans.end());
	cout << ans << endl;
	return 0;
}
// *&)*@*
  1. 입력받은 값 두개의 길이를 맞춰줍니다. (0을 붙여서요.)
  2. 각 자릿수마다 덧셈을 하고 만약 10보다 큰 값이 있다면 다음 자릿수에 그 값을 함께 더해줍니다.
  3. 각 자릿수에 대한 덧셈이 다 끝나고 가장 마지막의 덧셈이 10보다 큰 값이었다면 (carry가 0이 아니라면) 그 값을 제일 앞에 붙여줍니다.
728x90
반응형
Comments