※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2729번 문제인 이진수 덧셈이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2729
2729번: 이진수 덧셈
이진수 덧셈은 매우 간단하고, 십진수 덧셈과 비슷하게 하면 된다. 십진수 덧셈을 할 때는, 오른쪽부터 왼쪽으로 차례대로 숫자 하나씩 더하면 된다. 이진수 덧셈도 이와 비슷하게 하면 된다. 십
www.acmicpc.net
입력으로 주어지는 두 이진수의 덧셈을 구현하는 문제이다.
글쓴이는 문제의 답은 길어봐야 81비트이므로 gcc 컴파일러가 지원하는 128비트 정수 자료형 __int128을 이용해 문제를 간단하게 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
typedef __int128 lll;
lll n1, n2, ans;
string s;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int T; cin >> T;
while (T--) {
n1 = n2 = 0;
cin >> s;
for (auto& l : s) {
n1 <<= 1;
if (l == '1') n1++;
}
cin >> s;
for (auto& l : s) {
n2 <<= 1;
if (l == '1') n2++;
}
ans = n1 + n2;
if (!ans) s = "0";
else {
s = "";
while (ans) {
if (ans & 1) s += "1";
else s += "0";
ans >>= 1;
}
}
while (!s.empty()) {
cout << s.back();
s.pop_back();
}
cout << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 6905 // C++] Snakes and Ladders (0) | 2023.08.17 |
---|---|
[BOJ 17613 // C++] 점프 (0) | 2023.08.17 |
[BOJ 4107 // C++] Knitting (0) | 2023.08.16 |
[BOJ 15793 // C++] Anagrams (0) | 2023.08.16 |
[BOJ 6993 // C++] Shift Letters (0) | 2023.08.15 |