문제링크
https://www.acmicpc.net/problem/1252
문제
두 개의 이진수를 입력받아 이를 더하는 프로그램을 작성하시오.
입력
첫째 줄에 두 개의 이진수가 빈 칸을 사이에 두고 주어진다. 각 이진수는 1 또는 0으로만 이루어져 있으며, 0으로 시작할 수도 있다. 또한 각 이진수의 길이는 80을 넘지 않는다.
출력
첫째 줄에 이진수 덧셈 결과를 출력한다. 결과가 0인 경우를 제외하고는 출력되는 이진수는 항상 1로 시작해야 한다.
해석
입력 받은 수 중 앞에 있는 쓸데없는 0을 먼저 지워준다.
만약 둘 다 지워져서 비어있다면 0을 출력하도록 하고 하나라도 비어있다면 비어있지 않은 수를 출력한다.
둘다 비어있지 않다면 오른쪽 끝 부터 계산을 해주도록 한다.
코드
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
|
#include <iostream>
#include <string>
using namespace std;
int main() {
string fir;
string sec;
string ans = "";
cin >> fir >> sec;
// 앞의 0 지우기
while (fir[0] != '1' && !fir.empty()) {
fir.erase(0, 1);
}
while (sec[0] != '1' && !sec.empty()) {
sec.erase(0, 1);
}
if (fir.empty() && sec.empty()) {
cout << 0;
}
else if (sec.empty()) {
cout << fir;
}
else if (fir.empty()) {
cout << sec;
}
else {
int fir_length = fir.size() - 1;
int sec_length = sec.size() - 1;
int up = 0;
while (max(fir_length, sec_length) >= 0) {
int f = (fir_length < 0) ? 0 : fir[fir_length] - '0';
int s = (sec_length < 0) ? 0 : sec[sec_length] - '0';
int add = f + s + up;
up = add / 2;
add = add % 2;
ans.insert(0, to_string(add));
fir_length--;
sec_length--;
}
if (up == 1) {
ans.insert(0, "1");
}
cout << ans;
}
}
|
cs |
Memo
정말 오래 고민했다.. c++로 문자열 하는게 정말 어렵다는 생각이 들었다. 문자열을 사용해야 할 것 같으면 파이썬을 사용하는 것도 고려해야겠다.
string에 insert, erase, to_string을 사용해본 것에 의의를 두도록 하자.