A+B
https://www.acmicpc.net/problem/26711
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 1024 MB | 1950 | 1071 | 1024 | 62.098% |
문제
Mamy dla was zadanie stare jak świat, ale w nieco odświeżonej wersji.
Polega ono na dodaniu do siebie dwóch liczb, które tym razem mogą być dość duże.
Gdyby tylko na Potyczkach Algorytmicznych było jakieś narzędzie, które pomaga radzić sobie z dużymi liczbami…
오래된 퀘스트가 있지만 약간 새로워진 버전입니다.
여기에는 두 개의 숫자를 함께 추가하는 작업이 포함되며 이번에는 상당히 클 수 있습니다.
Algorithm Brawls에 큰 숫자를 다루는 데 도움이 되는 도구가 있었다면…
입력
W pierwszym wierszu wierszu standardowego wejścia znajduje się jedna dodatnia liczba całkowita a, która składa się z nie więcej niż 5 000 cyfr.
W drugim wierszu wierszu standardowego wejścia znajduje się jedna dodatnia liczba całkowita b, która składa się z nie więcej niż 5 000 cyfr.
Liczby a i b są podane bez zer wiodących.
표준 입력 라인의 첫 번째 라인에는 5,000자리 이하로 구성된 양의 정수 a가 하나 있습니다.
표준 입력 라인의 두 번째 라인에는 5,000자리 이하로 구성된 양의 정수 b가 하나 있습니다.
숫자 a와 b는 선행 0 없이 제공됩니다.
출력
W jedynym wierszu wyjścia powinien znaleźć się wynik dodawania a + b.
출력의 유일한 행은 a + b를 더한 결과여야 합니다.
예제 입력 1
1997 25
예제 출력 1
2022
출처
Contest > Algorithmic Engagements > PA 2022 0-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; }