큰 수 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번도 통과가 가능하다.
핑백: 백준 10826번 (피보나치 수 4, C++, DP) [BAEKJOON] - 어제와 내일의 나 그 사이의 이야기