https://www.acmicpc.net/problem/10757
10757번: 큰 수 A+B
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
솔루션
10^10000의 자릿수를 더할려면 C++로는 long long int로 받아도 오버플로우가 일어난다.
따라서 문자열로 받아서 덧셈을 해 주어야 한다.
1. 각각의 문자열을 입력 받고 뒤집어 준다.
2. 문자열의 자릿수를 맞춰주기 위해서 자릿수가 같아질 때 까지 0을 넣어준다.
3. 각각의 자릿수를 더해 가며 올림수를 올려준다.
코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string str1, str2;
string ans;
void sum() {
//문자열 길이 맞추고,
while (str1.size() != str2.size()) {
if (str1.size() > str2.size()) {
str2.push_back('0');
}
else str1.push_back('0');
}
int sum = 0, carry = 0;
for (int i = 0; i < str1.size(); i++) {
sum = str1[i] - '0' + str2[i] - '0' + carry;
carry = sum / 10;
sum %= 10;
ans.push_back((sum + '0'));
}
if (carry) ans.push_back((carry + '0'));
reverse(ans.begin(), ans.end());
return;
}
int main()
{
cin >> str1 >> str2;
//문자열 뒤집고
reverse(str1.begin(), str1.end());
reverse(str2.begin(), str2.end());
sum();
cout << ans << "\n";
}
'백준' 카테고리의 다른 글
C++[백준]4386번 별자리 만들기 (2) | 2023.01.05 |
---|---|
C++[백준]17143번 낚시왕 (2) | 2023.01.04 |
C++[백준]10217번 KCM Travel (0) | 2023.01.03 |
C++[백준]1162번 도로포장 (0) | 2023.01.03 |
C++[백준] 5719 거의 최단 경로 (0) | 2022.12.31 |