https://www.acmicpc.net/problem/15353
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
첫째 줄에 A+B를 출력한다.
문제 풀이
문자열 문제.
덧셈 문제이지만 범위가 long long 타입을 넘어서기 때문에 A와 B를 문자열로 입력받아 직접 덧셈을 구현해야 한다. 자릿수가 작은 쪽의 앞에 0을 삽입하여 두 숫자의 자릿수를 맞춘 후, 일의 자리부터 연산을 한다. 해당 자릿수 덧셈이 10이 넘으면 다음 자릿수에 1을 더해주면 되고, 일의 자릿수부터 맨 마지막 자릿수까지 연산을 끝낸 후에는 맨 마지막 자릿수 덧셈이 10이 넘었는지 확인한다. 넘었다면 정답을 저장하는 문자열의 맨 처음에 1을 삽입해준다.
아래는 코드.
더보기
#include <iostream>
#include <string>
using namespace std;
string add(string str1, string str2)
{
int N = str1.length();
int M = str2.length();
int counts = max(N, M);
bool isOver = false;
string answer = "";
if (N < M)
{
for (int i = 0; i < (M - N); i++)
{
str1.insert(0, "0");
}
}
else if (N > M)
{
for (int i = 0; i < (N - M); i++)
{
str2.insert(0, "0");
}
}
for (int i = 0; i < counts; i++)
{
int a = str1.at(counts - 1 - i) - 48;
int b = str2.at(counts - 1 - i) - 48;
int temp = a + b;
if (isOver)
{
temp++;
}
isOver = false;
if (temp >= 10)
{
temp -= 10;
isOver = true;
}
answer.insert(0, to_string(temp));
}
if (isOver == true)
{
answer.insert(0, "1");
}
return answer;
}
int main()
{
cin.tie(NULL);
ios::sync_with_stdio(false);
string str1, str2;
cin >> str1 >> str2;
cout << add(str1, str2);
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 16568] 엔비스카의 영혼 (C++) (1) | 2024.12.01 |
---|---|
[백준 17427] 약수의 합 2 (C++) (0) | 2024.11.30 |
[백준 14569] 시간표 짜기 (C++) (0) | 2024.11.28 |
[백준 1497] 기타콘서트 (C++) (0) | 2024.11.26 |
[백준 2828] 사과 담기 게임 (C++) (0) | 2024.11.25 |