백준 15353번 (큰 수 A+B (2), C++, 큰 수 연산) [BAEKJOON]

큰 수 A+B (2)

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

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초256 MB45842268189855.046%

문제

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

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

예제 입력 1

9223372036854775807 9223372036854775808

예제 출력 1

18446744073709551615

출처

  • 문제를 만든 사람: baekjoon
  • 데이터를 추가한 사람: gcon16
  • 문제의 오타를 찾은 사람: jh05013

알고리즘 분류


주의 사항

unsigned long long의 범위는 0 ~ 18,446,744,073,709,551,615 입니다.

18,446,744,073,709,551,615 에서 1만 더해도 오버 플로우가 발생합니다.

주어지는 A와 B의 범위는 0 < A,B < 1010000 이므로 unsigned long long 으로 해결이 불가능 합니다.

자리수에 상관없이 저장하고 연산을 하려면 숫자를 string 값으로 저장하고 덧셈을 처리해야 합니다.

가장 높은 자리가 연산이 끝나도 올림이 남았다면 리버스전에 push_back(‘1’)으로 추가

통과된 코드

#include <iostream>
#include <algorithm> // 알고리즘 해더파일이 없으면 백준에서 컴파일 오류가 난다. (reverse)

using namespace std;

// 두 문자열을 더해주는 함수
string SumString(string strA, string strB)
{
	string tempStr;

	// 두 문자열 중에서 가장 높은 인덱스 길이 찾음
	int maxLength = strA.length() > strB.length() ? strA.length() : strB.length();

	// 문자열을 뒤집어 준다.
	reverse(strA.begin(), strA.end()); 
	reverse(strB.begin(), strB.end());

	// 뒤집은 두 문자열의 인덱스를 맞추어 준다.
	for (int i = strA.length(); i < maxLength; i++) { strA.push_back('0'); }
	for (int i = strB.length(); i < maxLength; i++) { strB.push_back('0'); }

	int tempOne, tempTwo, tempThree;
	int up = 0; 

	// 같은 인덱스의 char를 int로 변환하고 서로 더 해준다.
	// 만약 up 변수로 올림 처리를 해준다.
	for (int i = 0; i < maxLength; i++) {
		tempOne = 0;
		tempTwo = 0;
		if (i <= strA.length()) { tempOne = strA[i] - '0'; } // char => int
		if (i <= strB.length()) { tempTwo = strB[i] - '0'; } // char => int
		tempThree = tempOne + tempTwo + up;
		up = 0;

		if (tempThree >= 10) {
			tempThree -= 10;
			up += 1; // 올림처리
		}

		tempStr.push_back(tempThree + '0'); // int => char
	}

	if (up >= 1) { tempStr.push_back('1'); } // 올림이 남아있다면
	reverse(tempStr.begin(), tempStr.end()); // 더한 값을 뒤집어 준다.
	return tempStr;
}

int main()
{
	string tempOne, tempTwo;
	cin >> tempOne >> tempTwo;
	cout << SumString(tempOne, tempTwo);

	return 0;
}

해더 파일에 algorithm을 추가하지 않아서 계속 컴파일 에러가 발생

위 코드로 백준 10757번도 통과가 가능하다.

“백준 15353번 (큰 수 A+B (2), C++, 큰 수 연산) [BAEKJOON]”에 대한 1개의 생각

  1. 핑백: 백준 10826번 (피보나치 수 4, C++, DP) [BAEKJOON] - 어제와 내일의 나 그 사이의 이야기

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤