10757번: 큰 수 A+B
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
첫째 줄에 A+B를 출력한다.
예제 입력 1
9223372036854775807 9223372036854775808 예제 출력 1
18446744073709551615
해결 아이디어
10^10000자리수의 수는 int, long long이 감당할 수 없는 매우 큰 범위이기때문에 숫자의 개념으로 보지않고 문자열로 이를 받아 문자열의 각 원소값을 처리하는 방식으로 접근하였다. A와 B의 입력 자리수가 다른경우 insert 함수를 이용하여 앞자리에 0을 넣어서 자리수를 맞춘 후 string 배열의 end()에서부터 begin()까지 순회하여 각 원소의 값을 덧셈하고 그 값이 round이면 다음 자리에서 +1을 해준 후 순차적으로 계산하도록 구현하였다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <iostream> #include <vector> using namespace std; int main() { string a, b; vector<int> ans; cin >> a >> b; if (a.length() > b.length()) { while (a.length() != b.length()) { b.insert(0, "0"); } } else { while (a.length() != b.length()) { a.insert(0, "0"); } } bool isRound = 0; int sum; for (int i = a.length() - 1; i >= 0; --i) { sum = (a[i] - '0' + b[i] - '0'); if (isRound) { ++sum; } if (sum >= 10) { isRound = 1; } else { isRound = 0; } ans.push_back(sum % 10); } if(isRound) ans.push_back(1); for (int i = ans.size() - 1; i >= 0; --i) { cout << ans[i]; } } | cs |
'algorithms (C++)' 카테고리의 다른 글
| [C++] 백준 17478번 / 재귀함수가 뭔가요? (0) | 2022.08.20 |
|---|---|
| [C++] 백준 10872번 / 팩토리얼 (0) | 2022.07.26 |
| [C++] 백준 9020번 / 골드바흐의 추측 (0) | 2022.07.24 |
| [C++] 백준 4948번 / 베르트랑 공준 (0) | 2022.07.24 |
| [C++] 에라토스테네스의 체 (0) | 2022.07.24 |