문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	string inputA, inputB;
	string tmp = ""; string result = "";
	short A, B, digit; bool carry = false;
	cin >> inputA >> inputB;
	if (inputA.length() < inputB.length()) swap(inputA, inputB);
	for (int i = 0; i < (inputA.length() - inputB.length()); ++i) tmp += "0";
	inputB = tmp + inputB;
	for (int i = inputA.length() - 1; i >= 0; --i)
	{
		A = inputA[i] - '0'; B = inputB[i] - '0';
		digit = A + B;
		if (carry == true) { digit += 1; carry = false; }
		if (digit > 9) carry = true;
		result += digit % 10 + '0';
	}
	if (carry == true) result += "1";
	for (int i = 0; i < result.length(); ++i)
	{
		cout << result[result.length() - 1 - i];
	}
}

 

풀이

  • C계열 언어에선 브론즈5 문제가 절대 아님.
  • inputA와 inputB의 길이중 inputB의 길이가 더 크다면 둘의 내용을 바꾼다(swap)
  • inputA와 inputB의 길이 차이만큼 tmp에 "0"을 추가한다. (자리수 맞추기 ex) 1234와 0001)
  • inputB = tmp + inputB (자리수 맞추기 ex) 1234와 0001)
  • inputA와 inputB의 1의 자리수를 A와 B로 설정(- '0'을 함으로 to_string함수를 안써도 된다.)
  • 올림수가 있으면 digit을 1올린다.
  • digit이 9 초과이면 올림수가 있음을 표시한다.
  • result에 digit의 1의자리만 추가한다. (+ '0'을 함으로 to_string함수를 안써도 된다.)
  • for문 밖에서 올림수가 있는지 검사한다. 올림수가 있으면 "1"을 추가한다.(30+70 = "00" + "1")
  • result를 뒤집어서 출력한다.