큰 수 A+B (2)
https://www.acmicpc.net/problem/15353
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 256 MB | 4584 | 2268 | 1898 | 55.046% |
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
첫째 줄에 A+B를 출력한다.
예제 입력 1
9223372036854775807 9223372036854775808
예제 출력 1
18446744073709551615
출처
알고리즘 분류
주의 사항
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번도 통과가 가능하다.


![백준 1316번 (그룹 단어 체커, C++) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/2022/10/boj-og-1-2048x1070-1-1024x535.png)
![백준 1981번 (배열에서 이동, C++) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og.png)
핑백: 백준 10826번 (피보나치 수 4, C++, DP) [BAEKJOON] - 어제와 내일의 나 그 사이의 이야기