티스토리 뷰
10757번: 큰 수 A+B
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
브론즈 문제이지만 잠이 와서 한 번 풀어보았습니다.
파이썬의 경우 해당 범위가 1만자리 수이므로 덧셈을 할 수 있습니다.
하지만 나머지 언어의 경우 보통 이런 경우 string으로 처리하여 계산하면 됩니다.
덧셈의 원리인 뒤에서부터 더하면서 올림자리가 있는지 판단하기만 하면 됩니다.
코드는 다음과 같습니다.
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string add(string a, string b) {
string result = "";
if (a.size() != b.size()) {
string zeros = "";
if (a.size() < b.size()) {
for (int i = 0; i < (b.size() - a.size()); i++)
zeros += '0';
a.insert(0, zeros);
}
else {
for (int i = 0; i < (a.size() - b.size()); i++)
zeros += '0';
b.insert(0, zeros);
}
}
int size = a.size();
int tmp = 0;
for (int i = size - 1; i > 0; i--) {
int x = a[i] - '0';
int y = b[i] - '0';
if (x + y + tmp >= 10) {
result += (char)('0' + (x + y + tmp - 10));
tmp = 1;
}
else {
result += (char)('0' + (x + y + tmp));
tmp = 0;
}
}
int last = (a[0] - '0') + (b[0] - '0') + tmp;
string last_s = to_string(last);
reverse(last_s.begin(), last_s.end());
result += last_s;
reverse(result.begin(), result.end());
return result;
}
int main()
{
string a, b;
cin >> a >> b;
cout << add(a, b);
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 / 11657 타임머신 C++ (0) | 2021.02.02 |
---|---|
백준 / 15684 사다리 조작 C++ (0) | 2021.02.01 |
백준 / 1516 게임 개발 C++ (0) | 2021.01.28 |
백준 / 2470 두 용액 C++ (0) | 2021.01.22 |
백준 / 1927 최소 힙 C++ (0) | 2021.01.22 |
댓글