※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts