반응형
https://www.acmicpc.net/problem/10757
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
첫째 줄에 A+B를 출력한다.
예제 입력 1 복사
9223372036854775807 9223372036854775808
예제 출력 1 복사
18446744073709551615
#include<iostream>
#include<string.h>
#include<cstring>
#include<algorithm>
int main()
{
std::string str1, str2;
std::cin >> str1 >> str2;
int str1_len = str1.length();
int str2_len = str2.length();
std::string str_new;
int carry = 0;
int temp = NULL;
char save_char = NULL;
if(str1_len == str2_len)
{
for(int i = str1_len - 1; i >= 0;i--)
{
temp = str1[i] + str2[i] - '0' - 48 + carry;
carry = 0;
if(temp >= 10)
{
carry=1;
temp = temp - 10;
}
save_char = temp + 48;
str_new.append(1, save_char);
// std::cout << "temp값은 : " << temp << std::endl;
if(i==0 && carry == 1)
{
save_char = 1 + 48;
str_new.append(1, save_char);
break;
}
save_char = NULL;
temp = 0;
}
}
else if(str1_len > str2_len)
{
for(int i = 0; i < str2_len ;i++)
{
temp = str1[str1_len-i-1] + str2[str2_len-i-1] - '0' - 48 + carry;
carry = 0;
if(temp >= 10)
{
carry=1;
temp = temp - 10;
}
save_char = temp + 48;
str_new.append(1, save_char);
save_char = NULL;
temp = NULL;
}
for(int j = str1_len - str2_len - 1; j >=0; j--)
{
temp = str1[j] - 48 + carry; //여기서는 '0'을 빼주지 않아도 좋다 왜인지는 모르겠음...
carry = 0;
if(temp >= 10)
{
carry=1;
temp = temp - 10;
}
save_char = temp + 48;
str_new.append(1, save_char);
if(j==0 && carry == 1 && temp == 0)
{
save_char = 1 + 48;
str_new.append(1, save_char);
break;
}
save_char = NULL;
temp = 0;
}
}
else
{
for(int i = 0; i < str1_len ;i++)
{
temp = str1[str1_len-i-1] + str2[str2_len-i-1] - '0' - 48 + carry;
carry = 0;
if(temp >= 10)
{
carry=1;
temp = temp - 10;
}
save_char = temp + 48;
str_new.append(1, save_char);
save_char = NULL;
temp = NULL;
}
for(int j = str2_len - str1_len - 1; j >=0; j--)
{
temp = str2[j] - 48 + carry; //여기서는 '0'을 빼주지 않아도 좋다 왜인지는 모르겠음...
carry = 0;
if(temp >= 10)
{
carry=1;
temp = temp - 10;
}
save_char = temp + 48;
str_new.append(1, save_char);
if(j==0 && carry == 1 && temp == 0)
{
save_char = 1 + 48;
str_new.append(1, save_char);
break;
}
save_char = NULL;
temp = 0;
}
}
while(str_new.length() > 0)
{
std::cout << str_new.back();
str_new.pop_back();
}
std::cout << str_new << std::endl;
return 0;
}
난이도가 브론즈5라는데 브론즈5치고는 조금 어려웠던 것 같습니다. 이 문제는 코딩 연습을 좀 하면 자주 나오는 문제인데 생각할게 조금은 있네요. 그리고 c++ string을 다루는 게 처음이어서 조금 더 낮설었던 것 같습니다. 아무래도 두 주어진 수의 길이를 더하기 위해선 뒤에서부터 더해 나가야 하니 그런 부분을 잘 생각해서 풀어야했습니다.
반응형
'코테 문제' 카테고리의 다른 글
[백준] 2581번 소수 (0) | 2021.01.12 |
---|---|
[백준] 1978번: 소수 찾기 (0) | 2021.01.12 |
[백준] 10250번: ACM 호텔 (0) | 2021.01.06 |
[백준] 2869번: 달팽이는 올라가고 싶다. (0) | 2021.01.06 |
[백준] 1193번: 분수찾기 (0) | 2021.01.05 |
댓글